我有一个清单(好吧,再多一点):
lst <- list(c(x=1, y=2), NULL)
如何从列表中获取这样的data.frame?
data.frame(x=c(1, NaN), y=c(2,NaN))
x y
1 1 2
2 NaN NaN
可能有一个聪明的函数,而不是迭代循环和追加(这将是内存效率低下)。
答案 0 :(得分:3)
我们可以使用if/else
将{NULL}元素替换为NaN
,然后使用rbind
替换do.call
do.call(rbind,lapply(lst, function(x) if(is.null(x)) NA else x))
或者我们根据逻辑索引(NULL
)将NaN
元素更改为sapply(lst, is.null)
并使用rbind
。
lst[sapply(lst, is.null)] <- NaN
setNames(do.call(rbind.data.frame, lst), paste0('V', 1:2))