我正在使用贝叶斯模型平均估计一些模型。我想并行化该过程,所以我尝试:
library(BMA)
library(parallel)
no_cores <- detectCores() - 1
cl <- makeCluster(no_cores)
bma_resp <- function(i) {
bma1 <- bicreg(
x.quest,
y.quest,
wt = rep(1, length(y.quest)),
strict = FALSE,
OR = 20,
maxCol = 31,
drop.factor.levels = FALSE,
nbest = 70
)
return(bma1)
}
final <- mclapply(1, bma_resp)
这样做我根本没有结果。我在Ubuntu上使用具有8个内核和64GB RAM的64位R。
谢谢。
答案 0 :(得分:2)
对于这样的任务,我更喜欢foreach
库。您可以像下面这样使用它。由于我没有任何数据,因此我使用文档中的样本数据,尽管由于无法进行迭代,所以总是得到相同的结果。但是您可以轻松检查它是否可以并行运行。
library(foreach)
library(parallel)
library(doParallel)
library(MASS) #just used for the UScrime data from documentation of BMA
data(UScrime)
registerDoParallel(**number of cores you want to use**)
bma_dat <- foreach(i=1:60)%dopar%{
library(BMA)
x.quest <- UScrime[,-16]
y.quest <- UScrime[,16]
bma1 <- bicreg(
x.quest,
y.quest,
wt = rep(1, length(y.quest)),
strict = FALSE,
OR = 20,
maxCol = 31,
drop.factor.levels = FALSE,
nbest = 70
)
return(bma1)
}
输出是一个嵌套列表,您可以单独处理
有关更多信息,请查看foreach的documentation
然后对数据(x.quest/y.quest)的不同迭代步骤使用i,然后将循环结束更改为所需的迭代次数。您可以使用length(df)
或类似的方法轻松地做到这一点。