R - 大数据 - 向量超过向量长度限制

tan*_*tan 3 r bigdata

我有以下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的例程,并允许并行评估(通过并行包).另一个策略是对数据进行下采样,这对统计受众来说不应过于恐吓.


Jos*_*ich 6

您的矩阵具有的元素多于最大向量长度2 ^ 31-1.这是一个问题,因为矩阵只是一个具有dim属性的向量. read.csv因为它返回一个data.frame,它是一个向量列表.

R> 75713*44771 > 2^31-1
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

有关?"Memory-limits"详细信息,请参阅

  • R的开发版本允许矢量和因此大于2 ^ 31-1的基质(总大小,而不是单个维度)."处理数据集"意味着您必须输入所有数据,并且必须将其表示为矩阵; 有用的分析可以没有. (3认同)