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

时间:2012-08-07 23:03:28

标签: r bigdata

我有以下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'

有什么问题可能是什么问题?

2 个答案:

答案 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"