R 中向量和列表数据类型的区别是什么?

R 中向量和列表数据类型之间的主要区别是什么?使用(或不使用)这两种数据类型的优缺点是什么?

我希望看到演示数据类型的用例的示例。

111349 次浏览

从技术上列出了 向量,尽管很少有人会使用这个术语。“列表”是几种模式之一,其他模式有“逻辑”、“字符”、“数字”、“整数”。你们所谓的向量是“原子向量”,用严格的 R 表述:

 aaa <- vector("list", 3)
is.list(aaa)   #TRUE
is.vector(aaa)  #TRUE

列表是(向量的)“递归”类型,而原子向量不是:

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

处理具有不同函数的数据对象取决于它们是递归的、原子的还是具有维属性(矩阵和数组)。但是,我不确定讨论不同数据结构的“优点和缺点”对于 SO 来说是否是一个足够集中的问题。为了补充汤米所说的,除了列表能够容纳任意数量的其他向量之外,还有数据框架的可用性,这是一种特殊类型的列表,具有定义其结构的维属性。不像矩阵和数组是真正折叠的原子对象,数据框架可以包含不同的类型,包括因子类型。

另外还有一个警告,当存在名称以外的属性时,is.vector函数将返回 FALSE

列表是“递归的”,这意味着它们可以包含不同类型的值,甚至包含其他列表:

x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values   # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo  # Get sub elements
x[[c(3,2)]]  # Another way (gets 13)
str(x)     # A "summary" of the list's content

在 R 中,列表用于表示数据集: data.frame类本质上是一个列表,其中每个元素都是一个特定类型的列。

另一种用法是在表示模型时: 来自 lm的结果返回一个包含大量有用对象的列表。

d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)


m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)

原子向量(非列表类,但是数字、逻辑和字符)很有用,因为所有元素都具有相同的类型。这使得操纵它们变得非常快。

这个问题和类似的介绍性问题在 http://www.burns-stat.com/pages/Tutor/hints_R_begin.html中得到了回答

它意味着一个温和的介绍,让您尽可能快地启动并运行 R。在某种程度上,它成功了。

编辑:

进一步解释的尝试; 引自上述参考文献。

原子矢量

原子矢量有三种类型 遭遇:

  • “数字”
  • “逻辑”
  • “character”

关于原子向量需要记住的是所有的元素 它们只有一种类型。

列表

列表可以在不同的组件中包含不同类型的项 一个列表的组件允许是另一个列表,即原子向量 (和其他事情)。

请同时参考 这个链接。

作为一个刚刚进入 R 领域,但是来自 C/Java/Ruby/PHP/Python 背景的人,下面是我对它的看法。

list实际上是一个数组 + 散列表,它是一个 PHP 关联数组。

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

vector是一个固定类型的数组/列表。可以把它想象成一个链表——因为把不同的项目放到一个链表中无论如何都是一种反模式。它是一个矢量,就像 SIMD/MMX/矢量单元使用这个词一样。

列表包括多种数据类型,如字符、数字、逻辑等,但是向量只包含相似类型的数据。 例如:

scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)

名单:

mylist <- list(scores,student,sc_log)
# search for class of mylist vector
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE

这意味着在 mylist 中包含多种数据类型,如数字、字符和逻辑。但是在向量中,该向量中所有元素的数据类型都是单一的

例如:

矢量:

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"


#which means all elements of vector containing single data type that is numeric only.