在R中开发了一个水文模型,该模型在函数中有8个参数,我希望使用DEoptim校准模型。由于运行每个函数所需的时间长度,我想并行 - 即DEOPtim函数,因为它有一个并行运行的选项。文档建议将其设置如下:
DEctrl <- DEoptim.control(trace=TRUE,parallelType=1,packages=c(),parVar=c())
ans <- DEoptim(Calibrate,lower,upper,DEctrl)
如果我在没有并行化的情况下运行DEoptim,那么它可以正常工作,但是如果我将parallelType
设置为1则会失败并出现以下错误:
Error in checkForRemoteErrors(val) :
8 nodes produced errors; first error: could not find function "startyear"
我想这是因为我没有在parVar
中设置packages
和DEoptim.control
,但我并不真正了解他们的要求。我想packages
是我前面加载的库模块,但不确定parVar
是什么。文档说parVar
是一个变量名称列表(作为字符串),它们需要存在于环境中以供目标函数使用,或者被目标函数用作参数。
我的代码是1500行,所以我不确定应该包含哪些变量名。代码是一系列子函数 - 这是其中的一部分:
library(DEoptim)
library(package = "hydromad")
library(maptools)
library(compiler)
#enableJIT(3)
library(tcltk)
library(raster)
Calibrate <- function(x) {
cmax <<- x[1]
Cr <<- x[2]
Cl <<- x[3]
Crb <<- x[4]
Clb <<- x[5]
returnflowriver <<- x[6]
returnflowland <<- x[7]
kd <<- x[8]
startyear()
-RSquaredboxcox
}
initialisemodel <- function() {
S1 <<- Sys.time()
# 1 Yangtze watershed inputs
# Load librarys
Starttime <- Sys.time()
Catchmentnum <- 1
# Set global parameters
Plothourlyrunoffswitch <- 0
cmin <<- 0.01
tempmelt <<- 1.5
tempsnow <<- 0.0
temprain <<- 1.5
DDFSnow <<- 4.1
DDFIce <<- 7.1
shiftcell <<- Resolution/3600
projstring <<- "+proj=longlat +datum=WGS84 +no_defs"
等等。
所以我的问题是,我应该在parVar
和packages
中包含哪些内容?
答案 0 :(得分:2)
正如您在问题中提到的那样,您需要使用parVar
和packages
。
packages
向量应列出您使用的所有包,例如您使用另一个包中的随机数生成器。
parVar
向量应包含在代码调用的函数或变量中。所以在你的情况下,
parVar = "startyear"
我强烈怀疑,这会引发另一个关于另一个缺失变量的错误(您应该将其添加到parVar
并重复此过程)。