parallel 套件 - parApply

撰寫高效 R 程式碼

Colin Gillespie

Jumping Rivers & Newcastle University

parallel 套件

  • 自 2011 年起內建於 R
    library("parallel")
    
    • 跨平台:程式碼可在 Windows、Linux、Mac 上執行
    • 提供多個常用函式的平行版本
撰寫高效 R 程式碼

apply() 函式

  • apply() 類似 for 迴圈

    • 對矩陣的每個列/欄「套用」一個函式
  • 10 欄、10,000 列的矩陣:

m <- matrix(rnorm(100000), ncol = 10)
  • apply 比 for 迴圈更俐落
res <- apply(m, 1, median)
撰寫高效 R 程式碼

改成平行版本

  • 載入套件
    • 指定核心數
    • 建立 cluster 物件
    • 換成 parApply()
    • 停止!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
撰寫高效 R 程式碼

壞消息

正如 Lewis Caroll 所說:

The hurrier I go, the behinder I get.

  • 有時平行反而更慢,因為執行緒之間需要通訊
# Serial version
apply(m, 1, median)
# Parallel version
parApply(cl, m, 1, median)
  • 對兩種解法做效能比較
撰寫高效 R 程式碼

一起來練習吧!

撰寫高效 R 程式碼

Preparing Video For Download...