R中的数据框和列表有什么区别?


74

dataframelist in有什么区别R?什么时候应该使用哪一个?哪个更容易循环?

确切的问题:我必须先存储3个字符串元素,例如“ a”,“ b”,“ c”。稍后,对于每个这些,我需要再添加3个元素;例如对于“ a”,我必须添加“ a1”,“ a2”,“ a3”。稍后,我必须使用嵌套的for循环来访问这些元素。

所以我很困惑使用数据框或列表或其他某种数据类型,我可以先在其中存储然后追加(每列的类型)?

目前,我遇到错误,例如“要替换的项目数不是替换长度的倍数”



真的是一个坏问题吗?我是R语言中的
新手

1
@ShazSimple问题本身并没有那么糟糕。这太普通了。如果你想解决您的具体问题,您有一个最小的可重复的例子展示我们作为解释在这里。为此,请提出一个新问题。我们可以在这里保留此作为参考。
Joris Meys

尽管您确实提供了有关如何实现目标的信息,但您仍然想知道要实现什么目标仍然不清楚。在中R,回答问题的最佳方法并不总是您可能会想的那样,因此更多信息会有所帮助。欢迎来到SO。
乔纳森

@Joris,谢谢您的建议。将会很快发布新问题
。.– ShazSimple

Answers:


118

这个问题并不像某些人认为的那么愚蠢。我知道很多人都在为这种差异而苦苦挣扎,在哪里使用什么。总结一下:

列表是迄今为止R中最灵活的数据结构。可以将它们视为元素的集合,而对每个元素的类,长度或结构没有任何限制。您唯一需要注意的是,您不会给两个元素使用相同的名称。这可能会引起很多混乱,R不会为此提供任何错误:

> X <- list(a=1,b=2,a=3)
> X$a
[1] 1

数据框也是列表,但是它们有一些限制:

  • 您不能对两个不同的变量使用相同的名称
  • 数据帧的所有元素都是向量
  • 数据帧的所有元素都具有相等的长度。

由于这些限制和所产生的二维结构,数据帧可能无法显示某些矩阵行为。您可以选择行并对行进行操作。您无法使用列表执行此操作,因为该行在此处未定义。

所有这些都意味着您应该为适合该二维结构的任何数据集使用数据框。本质上,从广义上讲,您对任何数据集使用数据框,其中列与变量重合,行与单个观测值重合。对于所有其他结构,列表是必经之路。

请注意,如果要使用嵌套结构,则必须使用列表。由于列表元素可以是列表本身,因此可以创建非常灵活的结​​构化对象。


2
后续问题:我有三个巨大的数据框,并且必须对它们执行许多统一的功能。我应该将它们放在列表中lapply还是应该将它们分开?哪一个会减少我的内存消耗,而释放我的计算机的可能性较小?
vagabond '02

1
@vagabond我应该检查一下,但是我怀疑瓶颈是lapply创建的修改列表。如果需要,可以使用Rprofmem和tracemem进行检查。
乔里斯·梅斯

0

看下面的例子:如果您使用apply而不是sapply来获取类,

apply(iris,2,class) #  function elements are rows or columns
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
"character"  "character"  "character"  "character"  "character" 

sapply(iris,class) # function elements are variables
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
"numeric"    "numeric"    "numeric"    "numeric"     "factor" 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.