Очень часто мне нужно преобразовать список, в котором каждый индекс имеет идентичные типы элементов, в кадр данных. Например, у меня может быть список:
> 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)
Однако это кажется очень неэффективным. Есть ли лучший способ сделать это?