dataframe和list in有什么区别R
?什么时候应该使用哪一个?哪个更容易循环?
确切的问题:我必须先存储3个字符串元素,例如“ a”,“ b”,“ c”。稍后,对于每个这些,我需要再添加3个元素;例如对于“ a”,我必须添加“ a1”,“ a2”,“ a3”。稍后,我必须使用嵌套的for循环来访问这些元素。
所以我很困惑使用数据框或列表或其他某种数据类型,我可以先在其中存储然后追加(每列的类型)?
目前,我遇到错误,例如“要替换的项目数不是替换长度的倍数”
dataframe和list in有什么区别R
?什么时候应该使用哪一个?哪个更容易循环?
确切的问题:我必须先存储3个字符串元素,例如“ a”,“ b”,“ c”。稍后,对于每个这些,我需要再添加3个元素;例如对于“ a”,我必须添加“ a1”,“ a2”,“ a3”。稍后,我必须使用嵌套的for循环来访问这些元素。
所以我很困惑使用数据框或列表或其他某种数据类型,我可以先在其中存储然后追加(每列的类型)?
目前,我遇到错误,例如“要替换的项目数不是替换长度的倍数”
R
,回答问题的最佳方法并不总是您可能会想的那样,因此更多信息会有所帮助。欢迎来到SO。
Answers:
这个问题并不像某些人认为的那么愚蠢。我知道很多人都在为这种差异而苦苦挣扎,在哪里使用什么。总结一下:
列表是迄今为止R中最灵活的数据结构。可以将它们视为元素的集合,而对每个元素的类,长度或结构没有任何限制。您唯一需要注意的是,您不会给两个元素使用相同的名称。这可能会引起很多混乱,R不会为此提供任何错误:
> X <- list(a=1,b=2,a=3)
> X$a
[1] 1
数据框也是列表,但是它们有一些限制:
由于这些限制和所产生的二维结构,数据帧可能无法显示某些矩阵行为。您可以选择行并对行进行操作。您无法使用列表执行此操作,因为该行在此处未定义。
所有这些都意味着您应该为适合该二维结构的任何数据集使用数据框。本质上,从广义上讲,您对任何数据集使用数据框,其中列与变量重合,行与单个观测值重合。对于所有其他结构,列表是必经之路。
请注意,如果要使用嵌套结构,则必须使用列表。由于列表元素可以是列表本身,因此可以创建非常灵活的结构化对象。
lapply
还是应该将它们分开?哪一个会减少我的内存消耗,而释放我的计算机的可能性较小?
看下面的例子:如果您使用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"