当列表是行列表时,最有效的列表到data.frame方法

时间:2012-01-06 20:26:40

标签: r memory-management data-management

This question涵盖了我有列列表的情况,我希望将它们转换为data.frame。如果我有一个行列表,并希望将它们转换为data.frame,该怎么办?

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

这样做效率更高?

2 个答案:

答案 0 :(得分: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 :(得分:1)

依靠R数组的主要方面,尝试直接强制转换为矩阵:

Data <- matrix(unlist(vectorList), ncol = length(vectorList[[1]]), byrow = TRUE)

如果这也不起作用,你没有资源来复制这个东西,所以考虑首先创建矩阵并逐列填充它。