Какой самый эффективный способ преобразовать список в качестве фрейма данных?

Очень часто мне нужно преобразовать список, в котором каждый индекс имеет идентичные типы элементов, в кадр данных. Например, у меня может быть список:

> my.list
[[1]]
[[1]]$global_stdev_ppb
[1] 24267673

[[1]]$range
[1] 0.03114799

[[1]]$tok
[1] "hello"

[[1]]$global_freq_ppb
[1] 211592.6


[[2]]
[[2]]$global_stdev_ppb
[1] 11561448

[[2]]$range
[1] 0.08870838

[[2]]$tok
[1] "world"

[[2]]$global_freq_ppb
[1] 1002043

Я хочу преобразовать этот список во фрейм данных, где каждый элемент индекса является столбцом. Естественно (для меня) использовать do.call :

> my.matrix<-do.call("rbind", my.list)
> my.matrix
     global_stdev_ppb range      tok     global_freq_ppb
[1,] 24267673         0.03114799 "hello" 211592.6       
[2,] 11561448         0.08870838 "world" 1002043

Достаточно просто, но когда я пытаюсь преобразовать эту матрицу как фрейм данных, столбцы остаются элементами списка, а не векторы:

> my.df<-as.data.frame(my.matrix, stringsAsFactors=FALSE)
> my.df[,1]
[[1]]
[1] 24267673

[[2]]
[1] 11561448

В настоящее время, чтобы правильно преобразовать фрейм данных, я перебираю каждый столбец, используя unlist и as.vector , а затем переделываю фрейм данных как таковой:

new.list<-lapply(1:ncol(my.matrix), function(x) as.vector(unlist(my.matrix[,x])))
my.df<-as.data.frame(do.call(cbind, new.list), stringsAsFactors=FALSE)

Однако это кажется очень неэффективным. Есть ли лучший способ сделать это?

46
задан DrewConway 22 December 2010 в 18:38
поделиться