Я пытаюсь запустить список моделей параллельно, удаленно подключаясь к суперкомпьютеру, чтобы использовать много ядер (через computeCanada), используя parLapply параллельного пакета.
Когда я запускаю строку:
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<-list(mod1, mod2, mod3, mod4)
После получения ошибки я проверил str (моды), и она была возвращена как «список из 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, поэтому любые рекомендации были бы чрезвычайно полезны для меня в это время! Заранее спасибо