我有以下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'
有什么问题可能是什么问题?
答案 0 :(得分: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的例程,并允许并行评估(通过并行包)。另一个策略是对数据进行下采样,这对统计受众来说不应过于恐吓。
答案 1 :(得分:6)
您的矩阵具有的元素多于最大向量长度2 ^ 31-1。这是一个问题,因为矩阵只是一个具有dim
属性的向量。 read.csv
有效,因为它返回一个data.frame,它是一个向量列表。
R> 75713*44771 > 2^31-1
[1] TRUE
有关详细信息,请参阅?"Memory-limits"
。