Running Multiple Bayesian Chains in Parallel R:3 nodes produced errors; first error: incorrect number of dimensions

Running Multiple Bayesian Chains in Parallel R:3 nodes produced errors; first error: incorrect number of dimensions

我正在尝试 运行 在多核上复制贝叶斯统计函数链;每个核心 1 个链。下面的函数 mcmc 是 运行 单个 mcmc 链的脚本。我的想法是我可以 运行 mcmc 函数三次,每个实例都在一个单独的核心上。我找到了几个我尝试修改的示例,但无法将其适当地修改为 运行。我收到以下错误:3 个节点产生错误;第一个错误:维数不正确。这让我觉得我不明白如何使用 apply 函数的并行版本。我一直认为它应该是直截了当的,但似乎找不到我的错误。我正在学习很多关于贝叶斯统计、编程和计算机的知识。谁能告诉我我做错了什么?

很抱歉,如果之前有人回答过这个问题,我找不到有用的答案。

library(parallel) 
library(snowfall) 
library(rlecuyer)

cps=detectCores()-5 #I have access to 8 cores, but want to target only three
sfInit(parallel=TRUE, cpus=cps)
sfExportAll()
sfClusterSetupRNG()

#necessary input; GB, all.layers, ind defined previously
nchain=3
n.mcmc=2000
df=9

#mcmc is a function to run a single mcmc chain
tmp.fcn <- function(i){
  tmp.out[i]=mcmc(GB,all.layers,ind,df,n.mcmc)
}


sfExport("GB","all.layers","ind","df","n.mcmc","nchain")
tmp.time=Sys.time()
score.list=sfClusterApplySR(1:nchain,tmp.fcn) 
time.1=Sys.time()-tmp.time

我明白我的问题是什么了。首先,我切换了包并使用并行而不是降雪。其次,我发现我需要一个列表来将我的问题分解成多个部分以应用我的函数。在我的例子中,我没有在我想要应用的函数中随机生成变量 t 的起始值,而是制作了一个包含 3 个随机起始值的列表,然后将我的函数 (tmp.func) 应用到该列表 (t.start).

library(parallel)
n.core<-detectCores()-5
cl <- makeCluster(n.core)

#write function
tmp.func<-function(i){
tmp.out=mcmc(GB,all.layers,ind,df=8,cov.1=.5,cov.0=.15,t.start[i],n.mcmc=11000)
tmp.out
}

t.start=c(.15,.1,.2)
clusterEvalQ(cl,{library(adegenet);library(Matrix);library(MASS);library(mvtnorm);library(fda);library(raster);library(rgdal)})

clusterExport(cl,c("t.start","GB","all.layers","ind","mcmc"))

#apply function
out.11k=parLapply(cl,1:length(t.start),tmp.func)


stopCluster(cl)