当列表是行的列表时,最有效的列表转数据框方法是什么?

3

这个问题讨论的是当我有一列列表时,我想把它们转换成数据框。如果我有一行列表,并且我想把它们转换成数据框,该怎么办呢?

rowList <- lapply(1:500000,function(x) sample(0:1,300,x))

解决这个问题的朴素方法是使用rbindas.data.frame,但我们甚至无法通过rbind步骤:

>Data <- do.call(rbind,vectorList)
Error: cannot allocate vector of size 572.2 Mb

什么方法更有效地完成这个任务?

可能是最高效的list转data.frame方法?的重复问题。 - Joshua Ulrich
@JoshuaUlrich -- 你确定这是一个重复的问题吗?Zach正在询问如何将一堆向量rbind在一起。你链接的帖子中探讨的方法似乎都是通过cbind或其他方式组合列来构建数据框。 - Josh O'Brien
@JoshO'Brien:说得好。Zach需要澄清,特别是因为do.call(rbind, vectorList)会创建一个矩阵,而不是数据框。 - Joshua Ulrich
@JoshuaUlrich:我编辑了我的帖子。如果还需要进一步澄清,请告诉我。 - Zach
2个回答

5

最快/最有效的方法可能是将您的列表 unlist 并填充矩阵:

> m <- matrix(unlist(vectorList), ncol=300, nrow=length(vectorList), byrow=TRUE)

但如果使用整数向量,需要约6GB的RAM,如果使用数字向量,需要约12GB的RAM。

> l <- integer(5e6*300)
> print(object.size(l),units="Gb")
5.6 Gb

1
尝试使用直接强制转换为矩阵,依赖于R数组的列主要方面:
Data <- matrix(unlist(vectorList), ncol = length(vectorList[[1]]), byrow = TRUE)

如果这也不起作用,那么您就没有资源来复制这个东西,因此请考虑先创建矩阵,然后逐列填充。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接