为什么rbind()和do.call(rbind,)会返回不同的结果?

时间:2016-01-28 23:32:52

标签: r rbind

我想将列表转换为数据帧,然后代码为:

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

1 个答案:

答案 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列。