我想用以下代码将列表转换为数据框架:
ls<-list(a=c(1:4),b=c(3:6))
do.call("rbind",ls)通过添加do.call获得的结果如下所示。它按需要返回一个data.frame对象。
do.call("rbind",ls)
[,1] [,2] [,3] [,4]
a 1 2 3 4
b 3 4 5 6但是,如果我直接使用rbind,它将返回一个列表。
为什么rbind 在这两种情况下的行为不同?
my.df<-rbind(ls)
str(ls)
my.df
a b
ls Integer,4 Integer,4
str(ls)
List of 2
$ a: int [1:4] 1 2 3 4
$ b: int [1:4] 3 4 5 6发布于 2016-01-29 00:00:22
do.call(rbind, ls)提供与Reduce(rbind, ls)相同的输出。后者的效率较低,但它可以显示您是如何迭代ls中的对象的,而不是直接操作ls (这是一个由2个列表组成的级联列表)。
它们都是通过“取消列表”来操作的,列表中的每个元素都有类numeric。当您使用rbind数值参数时,得到的类是一个矩阵,其中typeof是整数。如果您只是rbind列表,则列表中的每个元素都被认为是一个对象。所以返回的对象是一个matrix对象,它有1行2列和list类型的条目。如果它有1行,就应该表明它将对象ls看作是一件事,而不是两件事。键入rbind(ls, ls, ls)将显示3行2列。
https://stackoverflow.com/questions/35074200
复制相似问题