R向量和R列表数据types有什么区别?

我是R的新手,并试图让我的头,除了我有几个问题:

  • 正如标题所说,R向量和R列表数据types之间的主要区别是什么?

  • 此外,这些不同的数据types有什么优点/缺点?

我正在试图想到能够很好地演示每种数据types的例子,在实际的情况下,他们可能会被雇用但是有困难。 所以对此的帮助也将不胜感激。

技术上列表向量,但很less会使用这个术语。 “list”是几种模式之一,其他则是“逻辑”,“字符”,“数字”,“整数”。 你所说的vector在严格的R术语中是“primefaces”的:

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

列表是一个“recursion”types,而primefaces向量不是:

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

您使用不同的函数处理数据对象,具体取决于它们是recursion的,primefaces的还是具有维度属性(matrix和数组)。 但是,我不确定讨论不同数据结构的“优点和缺点”是SO的一个足够重点的问题。 为了增加Tommy所说的,除了能够容纳任意数量的其他向量的列表之外,还有可用的dataframe,这些dataframe是具有定义其结构的维度属性的特定types的列表。 与实际上折叠的primefaces对象的matrix和数组不同,数据框可以包含不同的types,包括因子types。

正如@DWin所解释的,列表是“recursion的”。 这意味着它们可以包含不同types的值,甚至包含其他列表:

 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类本质上是一个列表,其中每个元素是特定types的列。

另一个用途是表示一个模型: 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) 

…和primefaces向量(非数组,如数字,逻辑和字符)是有用的,因为所有元素已知具有相同的types。 这使得操纵它们非常快。

作为刚刚进入R但来自C / Java / Ruby / PHP / Python背景的人,以下是我的想法。

一个list实际上是一个数组+一个hashmap。 这是一个PHP关联数组。

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

vector是一个固定types的数组/列表。 把它想象成一个链表 – 因为把不相似的项目放入一个链表是一种反模式。 这是SIMD / MMX /vector单位使用该单词的vector。

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

这是一个温柔的介绍,让你尽快与R运行。 它在某种程度上成功了。

vector(一维数组) :可以保存数字,字符或逻辑值。 vector中的元素都具有相同的数据types。

R中的列表与您在工作或学校中的待办事项列表类似:该列表上的不同项目在长度,特性,必须完成的活动types方面最有可能不同。

R中的列表允许您以有序的方式在一个名称(即列表的名称)下收集各种对象。 这些对象可以是matrix,向量,dataframe,甚至其他列表等等。甚至不需要这些对象以任何方式相互关联。

你可以说列表是一种超级数据types:你可以存储几乎所有的信息!

要构造一个列表你使用函数列表(): my_list < – list(comp1,comp2 …)

列表函数的参数是列表组件。 请记住,这些组件可以是matrix,向量,其他列表,…

总而言之,列表和向量的主要区别在于,R中的列表允许您以有序的方式在一个名称下(即列表的名称)收集各种对象。 这些对象可以是matrix,向量,dataframe,甚至是其他列表等等。甚至不需要这些对象以任何方式相互关联,而vector中的元素都具有相同的数据types。