Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何并行化具有多个参数的函数?_R_Parallel Processing_Simulation_Cpu Cores - Fatal编程技术网

R 如何并行化具有多个参数的函数?

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$

我有一个特殊的模拟要执行,在R中运行需要一些时间。因为我想执行1000个模拟,所以我决定使用“并行”包将这些模拟分发到4个核上。我知道如果我有一个如下的函数,我可以得到一个结果向量

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 
)