在R中的并行环境中使用rm(list = ls())

时间:2015-11-16 21:44:00

标签: r linux parallel-processing

我在R中运行并行运行函数的代码。代码最初设置一些参数并加载库等,然后调用一个函数(称为校准),这会在几个工作程序上并行使用不同的输入参数,并将结果返回给中心。它工作正常,并且会发生一些迭代(有时会在几个小时内超过100次),但一段时间后会崩溃,我怀疑这是一个内存资源问题。因此,我想包含一个rm type命令来减少内存使用:

首先,该功能看起来像这样:

Calibrate <- function() {
rm(list = ls())
gc()
...rest of code calling other functions
}

但效果不大。仔细观察并逐行运行代码时,我意识到rm(list = ls())在函数内部的作用很小。

所以,我以为我会将代码更改为:

Calibrate <- function() {
ENV <- globalenv()
ll <- ls(envir = ENV)
lf <- lsf.str(envir = ENV)
ll <- ll[ll != lf]
rm(list = ll, envir = ENV)
....rest of code calling other functions
}

现在将删除所有变量而不是函数。但是,我担心这会消除所有仍在运行的其他工作人员的所有变量。代码并行运行,但代码不一定以相同的速度运行在所有工作程序上。所以代码实际上是错开的。我只想在调用校准函数时删除单个工作程序的变量。

所以我的问题是,在并行运行时,我应该怎样做才能清除一个工人的变量(rm)而不是整个系统?

帮助,非常感谢。

0 个答案:

没有答案