簡體   English   中英

R中具有多個參數的獨立函數的並行處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM