5

我想使用以下代码将列表转换为数据框:

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
4

1 回答 1

6

do.call(rbind, ls)为您提供与 相同的输出Reduce(rbind, ls)。后者效率较低,但它用于显示您如何迭代对象ls而不是ls直接操作(这是 2 个列表的串联列表)。

它们都通过“取消列出”列表中具有 class 的每个元素来操作numeric。当您使用rbind数字参数时,结果类是一个typeof整数矩阵。如果您只是rbind列表,则列表的每个元素都被视为一个对象。所以返回的对象是一个matrix有 1 行 2 列和类型条目的对象list。它有1行应该表明它将对象ls视为一件事,而不是两件事。键入rbind(ls, ls, ls)将给出 3 行和 2 列。

于 2016-01-29T00:00:22.593 回答