close

R語言其實有非常多的平行化套件

今天剛好使用到了 foreach + doParallel

就順便記錄下來


先介紹foreach

foreach用法就如同for迴圈,因此非常容易入手

程式碼:

library(foreach)
x = foreach (i = 1:3) %do% {
  sqrt(i)
}
x

output:

[[1]]
[1] 1

[[2]]
[1] 1.414214

[[3]]
[1] 1.732051

 

可以看出 foreach 有幾點和 for 不一樣的地方

1. 參數用等於去表示 (ex:i = 1:3)

2. 要加上一個 %do%

3. 前面要宣告一個變數等於此迴圈計算的結果

第三點表示foreach不能像一般for迴圈把裡面運算好的東西直接拿出來用

只能輸出最後的結果再取出來

另外可以宣告多個變數,也可以加上 .combine 改變輸出結果

程式碼:

x = foreach(a = 1:3, b = 11:13, .combine='c') %do% ( a + b )
x

output:

[1] 12 14 16

 


foreach + doParallel 平行化的方法

其實非常的簡單

只要在頭尾加上開始與關閉平行化的核心

再把foreach中的 %do% 改成 %dopar% 就好了

如果需要用到其他套件,可以加入參數 .packages 

程式碼:

library(foreach)
library(doParallel)

# 開啟平行核心數
cl = makeCluster(4)
registerDoParallel(cl)

x = foreach (i = 1:6, .combine='c', .packages = 'topicmodels') %dopar% {
  # 做你想做的事情
  lda = LDA(data)
  perplexity(lda,STM)
}

# 關閉平行核心數
stopCluster(cl)

output:

[1] 33 29 27 26 25 25

 

如此一來 foreach + doParallel 的平行化就成功了

改天有機會的話再來寫寫之前用過的另一款平行化套件:snow 

 

 

arrow
arrow
    創作者介紹
    創作者 Jacky 的頭像
    Jacky

    Jacky

    Jacky 發表在 痞客邦 留言(0) 人氣()