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

What is difference between dataframe and list in R?

R中的数据帧和列表有什么区别?什么时候应该使用哪一个?哪个更容易循环?

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

因此,我对使用数据帧、列表或其他数据类型感到困惑,在这些数据类型中,我可以先存储,然后追加(每列的类型)?

目前我有错误,比如"要替换的项目数不是替换长度的倍数"


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

列表是R中最灵活的数据结构,可以看作是元素的集合,对每个元素的类、长度或结构没有任何限制。唯一需要注意的是,不要给两个元素赋予相同的名称。这可能会引起很多混乱,R并没有给出错误:

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

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

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

由于这些限制以及由此产生的二维结构,数据帧可以模仿矩阵的某些行为。您可以选择行并对行执行操作。对于列表,不能这样做,因为其中有一行未定义。

所有这些都意味着您应该为适合该二维结构的任何数据集使用数据帧。本质上,对于任何一个数据集,如果一列与一个变量重合,而一行与一个广义上的单个观察重合,就可以使用数据帧。对于所有其他的结构,列表是前进的道路。

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


看看这个例子:如果你用apply而不是sapply来获取课程-

1
2
3
4
5
6
7
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"