2016年10月10日 星期一

讓R語言的迴圈跑平行處理

R語言中,可以用foreach搭配doMC這兩個套件來完成迴圈的平行化,程式碼如下:
rm(list = ls())
install.packages("foreach")
install.packages("doMC")
library(foreach)
library(doMC)
registerDoMC(4)     # Number of CPU cores used in parallel computing

### for loop, using single CPU core ###
df <- data.frame()
for(i in 1:10) {
    Sys.sleep(1)
    df <- rbind(df, data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i))
}

### foreach loop, using single CPU core ###
dfs <- foreach(i=1:10, .combine=rbind) %do% {
    Sys.sleep(1)
    data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i)
}
identical(df, dfs)

### foreach loop, using multiple CPU cores ###
dfp <- foreach(i=1:10, .combine=rbind) %dopar% {
    Sys.sleep(1)
    data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i)
}
identical(df, dfp)

沒有留言:

張貼留言