3

我有以下 R 代码:

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

我的 testfile.data 的更多统计信息:

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

由于这是一个大型数据集,所以我使用的是具有 64GB 内存空间的 Amazon EC2。所以希望内存不是问题。我能够加载数据(第一行有效)。但是 as.matrix 转换(第 2 行错误)会引发以下错误:

resulting vector exceeds vector length limit in 'AnswerType'

任何线索可能是什么问题?

4

2 回答 2

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 例程的完全访问权限,并允许并行评估(通过并行包)。另一种策略是对数据进行下采样,这对统计受众来说应该不会太吓人。

于 2012-08-08T00:24:40.147 回答
6

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

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

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

于 2012-08-07T23:22:52.483 回答