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
留言列表