我想将列表转换为数据帧,然后代码为:
Number 2
通过添加do.call的结果如下所示,它返回一个想要的数据帧
ls<-list(a=c(1:4),b=c(3:6))
do.call("rbind",ls)
但是如果我直接使用rbind函数,它会返回一个列表。 为什么rbind在这两种情况下表现不同?
> do.call("rbind",ls)
[,1] [,2] [,3] [,4]
a 1 2 3 4
b 3 4 5 6
答案 0 :(得分:4)
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列。