R-大数据-矢量超出矢量长度限制
我有以下R代码:R-大数据-矢量超出矢量长度限制,r,bigdata,R,Bigdata,我有以下R代码: data <- read.csv('testfile.data', header = T) mat = as.matrix(data) 因为这是一个大数据集,所以我使用的是AmazonEC2,内存空间为64GB。所以希望记忆不是问题。我能够加载数据(第一线工作)。 但是as.matrix transformation(第二行错误)抛出以下错误: resulting vector exceeds vector length limit in 'AnswerType' 有
data <- read.csv('testfile.data', header = T)
mat = as.matrix(data)
因为这是一个大数据集,所以我使用的是AmazonEC2,内存空间为64GB。所以希望记忆不是问题。我能够加载数据(第一线工作)。
但是as.matrix transformation(第二行错误)抛出以下错误:
resulting vector exceeds vector length limit in 'AnswerType'
有什么线索可能是问题吗?您的矩阵的元素数超过了最大向量长度2^31-1。这是一个问题,因为矩阵只是一个具有
dim
属性的向量read.csv
之所以有效,是因为它返回一个data.frame,这是一个向量列表
R> 75713*44771 > 2^31-1
[1] TRUE
有关更多详细信息,请参见
?“内存限制”
。如前所述,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的例程,并允许并行计算(通过并行包)。另一个策略是对数据进行下采样,这对统计受众来说不应该太吓人。就这么做吧。我已经添加了在R中查找此信息的链接。@mnel:谢谢您的编辑。我还添加了一些细节,说明为什么
read.csv
有效,而as.matrix
无效。@JoshuaUlrich那么这是否意味着没有办法让R处理像我一样大的数据集?R的开发版本允许向量,因此矩阵(总大小,而不是单个维度)大于2^31-1“处理数据集”意味着您必须输入所有数据,并且必须将其表示为矩阵;马丁·摩根:你能补充这一点作为答案,并详细说明(或举例说明)如何创建这么大的矩阵吗?还是支持开箱即用?@Martin并行计算可能不可能用于所有R函数。例如:glmnet。至少我不知道glmnet是否可以并行实现,这就是我当前数据分析所需要的
> sum(m)
Error: long vectors not supported yet:
/home/mtmorgan/src/R-devel/src/include/Rinlinedfuns.h:100