数据框架和列表在 R 中的区别是什么?

R数据帧名单的区别是什么?什么时候应该使用哪一个?哪个更容易循环?

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

所以我对使用数据框架或列表或其他数据类型感到困惑,我可以先在其中存储,然后附加(类似于每个列) ?

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

54093 次浏览

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

到目前为止,列表是 R 中最灵活的数据结构。它们可以被看作是元素的集合,对每个元素的类、长度或结构没有任何限制。唯一需要注意的是,不要给两个元素同名。这可能会引起很多混淆,R 不会为此给出错误:

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

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

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

由于这些限制和由此产生的二维结构,数据帧可以 米米克矩阵的一些行为。您可以选择行并对行进行操作。您不能对列表这样做,因为行在这里是未定义的。

所有这些都意味着,对于任何适合于该二维结构的数据集,都应该使用数据框架。本质上,对于任何数据集,您都使用数据框架,其中列与变量重合,行与广义上的单个观察值重合。对于所有其他结构来说,列表都是可行的方法。

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

看看这个例子: 如果您使用 application 而不是 sapplication 来获取类-

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"