2012-01-06 65 views
3

This question涵蓋的情況下,我有一個列的列表,我希望把它們變成一個data.frame。如果我有一個行列表,我希望將它們變成一個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 

什麼是更有效地做到這一點?

+0

可能重複的[最有效的列表data.frame方法?](http://stackoverflow.com/questions/5942760/most-efficient-list-to-data-frame-method) – 2012-01-06 20:41:18

+0

@JoshuaUlrich - 是你確定它是重複的?扎克正在詢問有關將一組載體連接在一起的問題。在你的鏈接文章中檢查的方法似乎都是通過''cbind'ing'或其他方式組合列來構建data.frames。 – 2012-01-06 20:59:24

+0

@ JoshO'Brien:好點。 Zach需要澄清,尤其是因爲'do.call(rbind,vectorList)'會創建一個矩陣,而不是data.frame。 – 2012-01-06 21:04:24

回答

5

它可能是最快/最有效的unlist您的列表,並填寫一個矩陣:

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

但你會需要〜6GB內存做,與整向量和〜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) 

如果這也不起作用你沒有足夠的資源來複制這件事情,所以考慮首先創建矩陣並逐列填充。

相關問題