R中的数据框和列表有什么区别?
R
数据框和列表有什么区别? 哪一个应该使用? 哪个更容易循环?
确切的问题:我必须先存储3个string元素,如“a”,“b”,“c”。 后来每个这些,我需要追加3个更多的元素; 例如“a”我必须添加“a1”,“a2”,“a3”。 后来我必须使用嵌套for循环来访问这些元素。
所以我很困惑使用数据框或列表或其他数据types,我可以先存储,然后追加(每列的种类)?
目前我收到错误,如“要更换的项目数不是更换长度的倍数”
这个问题并不像有些人认为的那样愚蠢。 我知道很多人正在为这种差异而努力,以及在哪里使用。 总结:
列表是迄今为止R中最灵活的数据结构。它们可以看作是元素的集合,对每个元素的类,长度或结构没有任何限制。 你唯一需要关心的是你不要给两个元素同名。 这可能会导致很多混乱,R不会给出错误的:
> X <- list(a=1,b=2,a=3) > X$a [1] 1
数据框也是列表,但它们有一些限制:
- 你不能为两个不同的variables使用相同的名字
- dataframe的所有元素都是向量
- dataframe的所有元素都有相同的长度。
由于这些限制和由此产生的二维结构,数据框架可以模仿matrix的一些行为。 您可以select行并对行进行操作。 你不能用列表来做这件事,因为在那里没有定义一行。
所有这一切意味着您应该使用适合于该二维结构的数据集的数据框。 本质上,您可以使用任何数据集的数据框,其中一列与variables重合,一行与广义上的单一观察值一致。 对于所有其他结构,列表是要走的路。
请注意,如果你想要一个嵌套的结构,你必须使用列表。 由于列表元素可以是列表本身,所以可以创build非常灵活的结构化对象。
看看这个例子:如果你使用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"