我有以下R代码:
data <- read.csv('testfile.data', header = T)
mat = as.matrix(data)
Run Code Online (Sandbox Code Playgroud)
我的testfile.data的更多统计信息:
> ncol(data)
[1] 75713
> nrow(data)
[1] 44771
Run Code Online (Sandbox Code Playgroud)
由于这是一个大型数据集,所以我使用的是带有64GB Ram空间的Amazon EC2.所以希望记忆不是问题.我能够加载数据(第一行工作).但as.matrix转换(第二行错误)会引发以下错误:
resulting vector exceeds vector length limit in 'AnswerType'
Run Code Online (Sandbox Code Playgroud)
有什么线索可能是什么问题?
Mar*_*gan 12
如上所述,R的开发版本支持大于2 ^ 31-1的向量.例如,这或多或少是透明的
> m = matrix(0L, .Machine$integer.max / 4, 5)
> length(m)
[1] 2684354555
Run Code Online (Sandbox Code Playgroud)
这是
> R.version.string
[1] "R Under development (unstable) (2012-08-07 r60193)"
Run Code Online (Sandbox Code Playgroud)
大对象消耗大量内存(对于我的例子,我的16G的62.5%)并且执行任何有用的操作需要几倍的内存.此外,即使对大数据进行简单操作也需要花费相当多的时间.并且还不支持对长向量的许多操作
> sum(m)
Error: long vectors not supported yet:
/home/mtmorgan/src/R-devel/src/include/Rinlinedfuns.h:100
Run Code Online (Sandbox Code Playgroud)
因此,通过迭代更大的文件来处理较小块的数据通常是有意义的.这样就可以完全访问R的例程,并允许并行评估(通过并行包).另一个策略是对数据进行下采样,这对统计受众来说不应过于恐吓.
您的矩阵具有的元素多于最大向量长度2 ^ 31-1.这是一个问题,因为矩阵只是一个具有dim
属性的向量. read.csv
因为它返回一个data.frame,它是一个向量列表.
R> 75713*44771 > 2^31-1
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
有关?"Memory-limits"
详细信息,请参阅