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

+1

Эти элементы списка на самом деле являются матрицами с именами столбцов. –

ответ

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

+0

Вы, конечно, правы! – cryo111

+0

BTW: Вы мне любопытно :) 'library (rbenchmark); 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)); bind1 = function (x) matrix (unlist (x), ncol = 2, byrow = TRUE); bind2 = function (x) do.call (rbind, x); benchmark (replications = 800000, bind1 (test_list), bind2 (test_list), columns = c ("test", "истек", "replications")) 'То же производительность; – cryo111

Смежные вопросы