![](/img/trans.png)
[英]R foreach parallel processing with unexported functions (with C50 example)
[英]Parallel processing of independent functions with multiple arguments in R
我有以下功能,它是我拥有的功能的一个更简单的版本,但它描绘了我正在努力做的事情。
我关注这里的讨论Parallelize a function in R (not a loop!)这是每个函数的单个参数的解决方案。
在我的情况下,我有以下函数unparal
它有多个参数可以在函数f_1,f_2,f_3,f_4
f_1 = function(x,y,z){
return(rnorm(z,x,y))
}
f_2 = function(x,y,z){
return(rgamma(z,x,y))
}
f_3 = function(x,y,z){
return(rbeta(z,x,y))
}
f_4 = function(x,y,z){
return(runif(z,x,y))
}
unparal = function(x,g,t,y,z){
res1 = f_1(x,g,z)
res2 = f_2(g,t,z)
res3 = f_3(t,y,z)
res4 = f_4(x,y,z)
res = c(res1,res2,res3,res4)
return(res)
}
我想做的是并行化函数unparal
,即并行运行所有函数f_1,f_2,f_3,f_4
。 有没有方便的方法来做到这一点?
有很多方法。 一是使用future
包。 比如像这样:
library(future)
unparal = function(x,g,t,y,z){
require(future)
res1 %<-% f_1(x,g,z) %seed% TRUE
res2 %<-% f_2(g,t,z) %seed% TRUE
res3 %<-% f_3(t,y,z) %seed% TRUE
res4 %<-% f_4(x,y,z) %seed% TRUE
res = c(res1,res2,res3,res4)
return(res)
}
plan(multisession, workers = 4)
unparal(1, 2, 3, 4, 5)
plan(sequential)
%<-%
运算符执行分配,但这是根据当前plan
完成的,因此在本例中是 4 个工作人员中的 1 个。 然后当访问结果时(在res = c(res1,res2,res3,res4)
中),主进程将等待所有四个结果都返回。
请注意%seed% TRUE
部分仅在您需要生成正确的随机数时才需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.