gpt4 book ai didi

R - EasyABC 中的并行化。错误 : . .. 找不到函数

转载 作者:行者123 更新时间:2023-12-01 15:21:28 24 4
gpt4 key购买 nike

我试图在 R 中并行运行包 EasyABC 中的 ABC_sequential() 函数。但我收到错误:

checkForRemoteErrors(val) 错误: 2个节点产生错误;第一个错误:找不到函数“f”

我认为这是因为 ABC_sequential() 最终调用了 parLapplyLB() ( https://github.com/cran/EasyABC/blob/master/R/EasyABC-internal.R ) 而我必须使用 clusterExport() 导出函数? ( parSapply not finding objects in global environment )

因为函数在其中调用了 makeCluster(),看来我可能必须修改包以添加 clusterExport(cl, "f")?但是,因为我是一个相当新的人,所以我没有考虑根据我的需要修改包(我怀疑它可能比添加一行代码更复杂)。我想知道是否有更好/更简单的解决方法来将我的函数放到并行节点上?下面是一个简化的可重现示例,该示例基于 ABC_sequential 的 R 帮助中给出的并行示例:

library(EasyABC)

f <- function(x){
x = x^2
}

toy_model_parallel <- function(x){
set.seed(x[1])
2 * x[2] + f(2) + rnorm(1,0,0.1)
}

sum_stat_obs <- 6.5
pacc <- .4
toy_prior <- list(c("unif",0,1)) # a uniform prior distribution between 0 and 1

# this line of code gives the checkForRemoteErrors(val) error
ABC_Lenormand <- ABC_sequential(method="Lenormand", model=toy_model_parallel, prior=toy_prior, nb_simul=20, summary_stat_target=sum_stat_obs, p_acc_min=pacc, use_seed=TRUE, n_cluster=2)
}

非常感谢任何建议。

最佳答案

您可以在模型函数中定义任何必要的辅助函数。在这种情况下:

toy_model_parallel <- function(x){ 
f <- function(x){
x = x^2
}
set.seed(x[1])
2 * x[2] + f(2) + rnorm(1,0,0.1)
}

看起来您需要在此函数的开头进行任何工作初始化。因此,如果您的函数需要调用另一个包中的函数,您还需要在模型函数的开头加载该包。

我建议你发邮件给包的开发者,看看他们有没有更好的办法解决这个问题。如果他们不这样做,您可能会要求他们添加对用户指定的集群对象的支持。

关于R - EasyABC 中的并行化。错误 : . .. 找不到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com