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

DCR*_*DCR 113 r list vector

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

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

42-*_*42- 70

技术上列表向量,尽管很少会使用该术语."list"是几种模式之一,其他模式是"逻辑","字符","数字","整数".你所谓的向量是严格的R术语中的"原子":

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE
Run Code Online (Sandbox Code Playgroud)

列表是"递归"类型,而原子向量不是:

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE
Run Code Online (Sandbox Code Playgroud)

您可以使用不同的函数处理数据对象,具体取决于它们是递归的,原子的还是具有维度属性(矩阵和数组).但是,我不确定对不同数据结构的"优缺点"的讨论是SO的一个充分关注的问题.为了增加Tommy所说的内容,除了列表能够容纳任意数量的其他向量之外,还有数据帧的可用性,这些数据帧是具有定义其结构的维度属性的特定类型的列表.与真正折叠原子对象的矩阵和数组不同,数据帧可以包含不同的类型,包括因子类型.


Tom*_*mmy 48

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

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
Run Code Online (Sandbox Code Playgroud)

列表在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)
Run Code Online (Sandbox Code Playgroud)

原子向量(非列表,但数字,逻辑和字符)很有用,因为已知所有元素具有相同的类型.这使得操作速度非常快.


And*_*y V 17

作为刚进入R的人,但来自C/Java/Ruby/PHP/Python背景,我就是这么想的.

A list实际上是一个数组+一个hashmap.它是一个PHP关联数组.

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
Run Code Online (Sandbox Code Playgroud)

A vector是固定类型的数组/列表.可以把它想象成一个链表 - 因为将不相似的项目放入链表中反正是一种反模式.它是SIMD/MMX /向量单位使用该词的相同意义上的向量.

  • 你可以使用`names`方法在向量中使用`key`s. (3认同)

Pat*_*rns 9

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

它应该是一个温和的介绍,让您尽快启动和运行R. 在某种程度上它成功了.

  • 不推荐使用:您至少应指出我们该网站的特定部分,该部分可以回答原始问题。 (2认同)