【发布时间】:2016-01-28 23:32:51
【问题描述】:
我想将列表转换为数据框,代码如下:
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
【问题讨论】:
-
do.call("rbind", ls)返回一个矩阵,而不是一个数据框。与rbind(ls)相同。 -
因为
do.call将元素从列表中提取出来——这就是区别。好像你会做rbind(ls[[1]], ls[[2]]) -
谢谢@RichardScriven,但
rbind(ls)的输出仍然是一个列表。其实我想要的是将列表转换为矩阵 -
不,
rbind(ls)的输出是一个矩阵。它包含列表元素。见class(rbind(ls)) -
因为在问这样的问题之前你应该阅读函数的帮助页面。
?do.call