2013-04-29 44 views
0

这里是清单的外观:如何将命名向量列表转换为R中的数据框?

>>>print(pelist) 
[[1]] 
    Power Type I Error 
[1,]  1  0.024339 

[[2]] 
    Power Type I Error 
[1,] 0.8  0.038095 

[[3]] 
    Power Type I Error 
[1,]  1  0.032804 

我能做到这样,但作为该列表的大小增长很快变得不切实际:

>>>rbind(pelist[[1]], pelist[[2]], pelist[[3]]) 
    Power Type I Error 
[1,] 1.0  0.024339 
[2,] 0.8  0.038095 
[3,] 1.0  0.032804 
+0

这是回答您的问题吗? http://stackoverflow.com/questions/2851327/r-converting-a-list-of-data-frames-into-one-data-frame – sashkello 2013-04-29 23:18:25

+1

那些列表元素实际上是列名称的矩阵。 – 2013-04-29 23:36:03

回答

3

的惯用做法是用do.call

do.call(rbind, pelist) 
0

鉴于您的列表元素都相同的长度,你也可以使用

test_list=list(matrix(c(1,2),ncol=2,nrow=1),matrix(c(3,4),ncol=2,nrow=1),matrix(c(5,6),ncol=2,nrow=1)) 

test_matrix=matrix(unlist(test_list),ncol=2,byrow=TRUE) 

我不确定,但这可能比后续的rbind调用更快。

+1

OP和@mnel都在对'rbind'进行一次调用。这是一个内部功能,你可以打赌它不会浪费资源。 – flodel 2013-04-29 23:38:25

+0

你当然是对的! – cryo111 2013-04-30 01:21:34

+0

顺便说一句:你让我好奇:)'library(rbenchmark); (矩阵c(1,2),ncol = 2,nrow = 1),矩阵(c(3,4),ncol = 2,nrow = 1),矩阵c(5,6) ,NcoI位= 2,nrow = 1)); bind1 = function(x)matrix(unlist(x),ncol = 2,byrow = TRUE); bind2 = function(x)do.call(rbind,x); 基准(重复= 800000, bind1(test_list) bind2(test_list) 列= C( “测试”, “过去”, “复制”))'相同的性能;) – cryo111 2013-04-30 01:22:34

相关问题