R 如何并行化具有多个参数的函数?
我有一个特殊的模拟要执行,在R中运行需要一些时间。因为我想执行1000个模拟,所以我决定使用“并行”包将这些模拟分发到4个核上。我知道如果我有一个如下的函数,我可以得到一个结果向量R 如何并行化具有多个参数的函数?,r,parallel-processing,simulation,cpu-cores,R,Parallel Processing,Simulation,Cpu Cores,我有一个特殊的模拟要执行,在R中运行需要一些时间。因为我想执行1000个模拟,所以我决定使用“并行”包将这些模拟分发到4个核上。我知道如果我有一个如下的函数,我可以得到一个结果向量 results_parallel <- parSapply(cl, c(1000,1000,1000,1000), rnorm) results\u parallel您可以尝试创建一个函数包装器,它接受一个参数而不是多个参数 rnorm1 <- function(ls){ rnorm(n = ls$
results_parallel <- parSapply(cl, c(1000,1000,1000,1000), rnorm)
results\u parallel您可以尝试创建一个函数包装器,它接受一个参数而不是多个参数
rnorm1 <- function(ls){
rnorm(n = ls$n, mean = ls$mean, sd = ls$sd)
}
cl <- makeCluster(2)
example_list <- list(
list(n=1000, mean = 0, sd = 1),
list(n=1000, mean = 1, sd = 2)
)
results_parallel <- parSapply(cl, example_list, rnorm1)
rnorm1我不确定这正是您想要的,但是您应该能够在函数调用中添加要传递给rnorm
的参数。我以前没有使用过parSapply
,但这里使用的是llply
:
doMC::registerDoMC( cores = 4 )
results <- plyr::llply( .data = c(1000,1000,1000,1000),
.fun = rnorm, mean = 1, sd = 0.4,
.parallel = T
)
这确实是一个很好的解决办法。我试过这个,效果很好。谢谢。如果解决方案回答了您的问题,请确保您将其标记为已接受,以帮助其他人在将来找到它。
results_parallel <- parSapply( cl,
X = c(1000,1000,1000,1000),
FUN = rnorm, mean = 1, sd = 0.4
)