2013-04-29 88 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