我正在尝试通过远程连接到超级计算机以使用并行包的 parLapply 使用许多内核(通过 computeCanada)来并行运行模型列表。
当我运行该行时:
modsout<-parLapply(cl=cl, X=mods, fun=run_um)
我收到以下错误:
models3out<-parLapply(cl=cl, X=mods, fun=run_um)
Error in do.call(c, clusterApply(cl = cl, x = splitList(X, nchunks), fun
= lapply, :
second argument must be a list
Calls: parLapply -> do.call
Execution halted
我通过执行以下操作创建了我的“mods”列表:
mods<-list(mod1, mod2, mod3, mod4)
收到错误后,我检查了 str(mods),它作为“4 的列表”返回,所以我真的不明白为什么它在我的 parLapply 行中没有被识别。
这是我的代码的摘录:
nodeslist = unlist(strsplit(Sys.getenv("NODESLIST"), split=" "))
cl<-makeCluster(nodeslist, type="PSOCK") #make cluster
#load all the data xxx
#create model list
mods<- list(b0<-list(formula='~1~1', data=bear3),
b1<-list(formula='~trail+elev+precip+temp+hum+cat+tree+month+topo~1', data=bear3),
b2<-list(formula='~trail~1', data=bear3),
b3<-list(formula='~elev~1', data=bear3))
run_um<-function(x) {unmarked::occu(as.formula(x[[1]]),x[[2]])} #define the function
clusterExport(cl=cl, varlist=c("bear3", "run_um") #send data to cores
clusterEvalQ(cl=cl, library(unmarked))#load package on all cores
modsout<-parLapply(cl=cl, X=mods, fun=run_um)
我的全部工作有超过 2000 个模型,每个模型至少需要 20 分钟才能运行,而且我必须运行拟合优度测试,这就是我尝试使用 HPC 的原因。我还是 R 的新手,而且对 HPC 非常陌生,所以此时任何指导对我都非常有用!提前致谢