我正在尝试并行修改R中的大型3D数据集。像其他一些人一样,我已经碰到了R正在修改变量副本的问题,而不是“就地”修改它们。
我已经看过Hadley关于循环的页面并在适当位置进行修改(http://adv-r.had.co.nz/memory.html#modification),并且正在使用mcmapply(mapply的并行版本)来修改列表。但我的内存使用量仍在爆炸。我没有找到明确记录这个问题以及如何解决它的其他问题。根据Hadley的页面,如果一个人正在修改列表修改应该发生,但这显然不会发生在我身上。这些不是全局变量,在其他地方没有被引用。
我正在处理每个约1GB的3个变量,但由于我正在执行的操作,我超过了20GB的RAM。我用过的其他语言对此没有问题(在这种情况下我不得不坚持使用R)。
有没有人找到一种内存有效的方法来并行修改多维数据集?特别是在变量被修改的地方?
作为我正在编码的简化示例:
从文件中读取var1到var4~每个800 MB,var5只是两个数字的数组。
for (long in 1:length(lon)) {
outdata[[long]] <- mcmapply(function,arg1<-var1[long,],arg2<-var2[long,],arg3<-var3[long,],arg4<-var4[long,],MoreArgs<-list(arg5<-var5));
gc(verbose=TRUE)
}
每次迭代时,gc报告的内存增长约50 MB,因此我很快就会使用GB的内存。 “outdata”列表也是事先定义的。
任何帮助都将不胜感激。