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 代码写作

转换为并行

  • 载入软件包
    • 指定核心数
    • 创建集群对象
    • 切换为 parApply()
    • 停止!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
高效 R 代码写作

坏消息

正如刘易斯·卡罗尔所说:

我越赶越落后。

  • 并行有时更慢,因线程通信开销
# 串行版本
apply(m, 1, median)
# 并行版本
parApply(cl, m, 1, median)
  • 请对两种方案进行基准测试
高效 R 代码写作

让我们来练习!

高效 R 代码写作

Preparing Video For Download...