2013-11-27 128 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