Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 大矩阵和内存问题_R_Matrix_R Bigmemory_Bigdata - Fatal编程技术网

R 大矩阵和内存问题

R 大矩阵和内存问题,r,matrix,r-bigmemory,bigdata,R,Matrix,R Bigmemory,Bigdata,我正在处理一个巨大的数据集,我想导出一个测试统计数据的分布。因此,我需要使用巨大的矩阵(200000x200000)进行计算,正如您可能预测的那样,我有内存问题。更准确地说,我得到以下信息:错误:无法分配大小的向量。。。国标。我使用64位版本的R,我的RAM是8Gb。我尝试使用bigmemory软件包,但没有取得很大成功 第一个问题是当我必须计算距离矩阵时。我在名为Dist的amap包中发现了这个很好的函数,它可以并行计算数据帧中的列的距离,它工作得很好,但是它会生成下/上三角形。我需要距离矩阵

我正在处理一个巨大的数据集,我想导出一个测试统计数据的分布。因此,我需要使用巨大的矩阵(200000x200000)进行计算,正如您可能预测的那样,我有内存问题。更准确地说,我得到以下信息:错误:无法分配大小的向量。。。国标。我使用64位版本的R,我的RAM是8Gb。我尝试使用bigmemory软件包,但没有取得很大成功

第一个问题是当我必须计算距离矩阵时。我在名为Dist的amap包中发现了这个很好的函数,它可以并行计算数据帧中的列的距离,它工作得很好,但是它会生成下/上三角形。我需要距离矩阵来执行矩阵乘法,不幸的是,我不能使用矩阵的一半。当使用as.matrix函数使其满时,我再次遇到内存问题

因此,我的问题是如何通过跳过as.matrix步骤将dist对象转换为big.matrix。我想这可能是一个Rccp问题,请记住我在Rccp是一个新手

先走一步

将“距离”对象转换为“(大)矩阵时:
stats:::as.matrix.dist
调用了
t
以及创建大型中间对象的运算符。为了避免这些问题,除其他选择外,您可以使用以下方法:

关于数据:

nr = 1e4
m = matrix(runif(nr), nr, 10)
d = dist(m)
然后,慢慢地分配并填写“矩阵”:

(似乎将“md”分配为
big.matrix(n,n,init=0)
同样有效)

使用较小的“nr”,我们可以测试:

all.equal(as.matrix(md), as.matrix(d), check.attributes = FALSE)
#[1] TRUE

你可以看看或者。我不确定这是否有助于解决您的内存问题,但它肯定会加快矩阵运算。有一个类似的
big.matrix
距离问题可能会有所帮助。非常感谢alex,这听起来是可行的。让我试试看,我会带着反馈回来:)
md[2:5, 1]
#[1] 2.64625973 2.01071637 0.09207748 0.09346157
d[1:4]
#[1] 2.64625973 2.01071637 0.09207748 0.09346157
all.equal(as.matrix(md), as.matrix(d), check.attributes = FALSE)
#[1] TRUE