Функции l*ply
могут стать вашим лучшим другом при работе со списком. Попробуйте это:
> library(plyr)
> ldply(data, data.frame)
k1 k2
1 v1 v2
2 v3 v4
plyr
выполняет очень приятную закулисную обработку, чтобы иметь дело с такими вещами, как нерегулярные списки (например, когда каждый список не содержит одинаковое количество элементов). Это очень распространено в JSON и XML, и с базовыми функциями сложно справиться.
Или, альтернативно, используя базовые функции:
> do.call("rbind", lapply(data, data.frame))
Вы можете использовать rbind.fill
(из plyr
) вместо rbind
, если у вас неправильные списки, но я бы посоветовал просто использовать plyr
с самого начала, чтобы облегчить вашу жизнь.
Edit:
Что касается вашего более сложного примера, использование предложения Хэдли легко решит эту проблему:
> x<-list(list(k1=2,k2=3),list(k2=100,k1=200),list(k1=5, k3=9))
> ldply(x, data.frame)
k1 k2 k3
1 2 3 NA
2 200 100 NA
3 5 NA 9