2012-08-07 82 views
3

我有下列R-代碼:的R - 大數據 - 向量超過向量長度的限制

data <- read.csv('testfile.data', header = T) 
mat = as.matrix(data) 

我testfile.data的一些更多的統計數據:

> ncol(data) 
[1] 75713 
> nrow(data) 
[1] 44771 

由於這是一個大的數據集,所以我使用的是具有64GB RAM空間的Amazon EC2。所以希望記憶不是問題。我能夠加載數據(第一行)。 但as.matrix改造(第二行的錯誤)引發以下錯誤:

resulting vector exceeds vector length limit in 'AnswerType' 

任何線索可能是什麼問題?

回答

6

您的矩陣比最大向量長度爲​​2^31-1的元素多。這是一個問題,因爲矩陣只是一個具有dim屬性的向量。 read.csv工作,因爲它返回一個data.frame,它是一個向量列表。

R> 75713*44771 > 2^31-1 
[1] TRUE 

查看?"Memory-limits"瞭解更多詳情。

+0

只是打敗了我。我已經在R中添加了鏈接以查找此信息。 – mnel 2012-08-07 23:25:32

+0

@mnel:感謝您的編輯。我還添加了一些關於爲什麼'read.csv'工作但'as.matrix'不工作的細節。 – 2012-08-07 23:27:48

+0

@JoshuaUlrich那麼這是否意味着沒有辦法讓R處理與我擁有的數據集一樣大的數據集? – tan 2012-08-07 23:31:44

12

如上所述,R的開發版本支持大於2^31-1的向量。這是更多或更少的透明,比如

> m = matrix(0L, .Machine$integer.max/4, 5) 
> length(m) 
[1] 2684354555 

這是

> R.version.string 
[1] "R Under development (unstable) (2012-08-07 r60193)" 

大對象消耗大量的內存(我的16G的62.5%,爲我的例子),並做任何事情有用的需要幾倍的記憶。而且,即使是對大數據的簡單操作也需要相當長的時間。而在長矢量許多操作都還不支持

> sum(m) 
Error: long vectors not supported yet: 
    /home/mtmorgan/src/R-devel/src/include/Rinlinedfuns.h:100 

所以它往往是有道理通過一個較大的文件迭代處理較小的塊中的數據。這可以完全訪問R的例程,並允許並行評估(通過並行程序包)。另一個策略是對數據進行縮減採樣,這對統計受衆應該不會太嚇人。

+0

+1謝謝Martin! – 2012-08-08 00:53:47

+0

@Martin並行評估可能不適用於所有R函數。例如:glmnet。至少我不知道glmnet是否可以並行執行,這是我目前的數據分析所需要的 – tan 2012-08-08 08:16:32