2013-11-27 189 views
2

我正在调用for循环中的函数。并行for循环R

sample_fun <- function(x,y) { 
    # do something with x,y and return value 
} 

My loop looks like 
result = list() 

for(i in 1:10000) 
    result[i] = sample_fun(i,i+1) 

我该如何并行化这个循环。使用foreach和dopar会导致下标错误。

回答

6
library(doSNOW) 

sample_fun <- function(x,y) { 
    # do something with x,y and return value 
} 

threads <- 8 
N <- 10000 

cl <- makeCluster(threads) 
registerDoSNOW(cl) 

result <- foreach(i=1:N) %dopar% sample_fun(i,i+1) 

stopCluster(cl) 

http://www.joyofdata.de/blog/parallel-computing-r-windows-using-dosnow-foreach/

+0

谢谢喜悦。用户时间缩短10%。你会建议更积极的方法。我正在尝试使用igraph包处理巨大图表 –

+0

请查看链接。诀窍是平衡每个处理块的大小,以适当的方式交给线程。有了8个内核,我可以获得高达450%的提升。在你的任务管理器中观察新创建的R会话会发生什么 - 它们的CPU和RAM使用情况。 – Raffael

+0

尊敬的Raffael,请接受我提前要求您的帮助的道歉!,但是,碰巧知道[** This Question **]的解决方案(https://stackoverflow.com/questions/47857624/r-function - 即用途 - 它 - 拥有 - 输出 - AS-IT-自己输入)? – rnorouzian