78

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

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

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

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

4

2 回答 2

126

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

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

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

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

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

由于这些限制和由此产生的二维结构,数据帧可以模仿矩阵的某些行为。您可以选择行并对行进行操作。你不能用列表来做到这一点,因为那里没有定义行。

所有这些都意味着您应该为适合该二维结构的任何数据集使用数据框。从本质上讲,您可以将数据框用于任何数据集,其中列与变量一致,而行与广义上的单个观察一致。对于所有其他结构,列表是要走的路。

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

于 2013-04-09T13:14:57.057 回答
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" 
于 2015-08-12T17:26:39.237 回答