R
中的数据框和列表之间有什么区别?应该使用哪一个?哪个更容易循环?
确切的问题:我必须先存储3个字符串元素,如“a”,“b”,“c”。后来对于其中的每一个,我需要追加3个元素;例如对于“a”,我必须添加“a1”,“a2”,“a3”。后来我必须使用嵌套的for循环来访问这些元素。
所以我很困惑使用数据帧或列表或其他一些数据类型,我可以先存储然后追加(每列的种类)?
目前我遇到错误,例如“要替换的项目数量不是替换长度的倍数”
答案 0 :(得分:110)
这个问题并不像有些人认为的那样愚蠢。我知道有很多人在努力应对这种差异,以及在哪里使用。总结一下:
列表是迄今为止R中最灵活的数据结构。它们可以看作是元素的集合,对每个元素的类,长度或结构没有任何限制。您唯一需要注意的是,您不要给两个元素指定相同的名称。这可能会造成很多混乱,R不会给出错误:
> X <- list(a=1,b=2,a=3)
> X$a
[1] 1
数据框也是列表,但它们有一些限制:
由于这些限制和由此产生的二维结构,数据框可以模仿某些矩阵行为。您可以选择行并对行执行操作。您不能对列表执行此操作,因为那里的行未定义。
所有这些意味着您应该为适合该二维结构的任何数据集使用数据框。实质上,您将数据框用于任何数据集,其中列与变量重合,并且行与广义上的单个观察重合。对于所有其他结构,列表是可行的方法。
请注意,如果您需要嵌套结构,则必须使用列表。由于列表的元素可以自己列出,因此您可以创建非常灵活的结构化对象。
答案 1 :(得分: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"