R语言 并行处理与共享内存
用R编程时,我们可能会需要并行(parallel)处理一个耗时很长的任务,有时又希望每个子任务都能访问和修改同一个变量,那这个变量就应放在共享内存(shared memory)中,下面我就简单介绍怎样快速实现:
并行处理
注:下面我讲的并行处理方法适用于Linux/Mac系统,不适用Windows系统,当然Window下可以实现R的并行处理,具体请另查资料。
R里面有很多可实现并行的包,我们这里使用R自带的基础包:parallel
library(parallel)
detectCores()
## [1] 8
载入包后可以看看自己的电脑有多少个核可以用,我的理解是你的电脑有多少个核,你就可以将任务最多分成多少个子任务同时处理。
a <- c(0, 0, 0, 0, 0)
f <- function(x) {
a[1] <- a[1] + 1
Sys.sleep(1)
}
system.time(
for(i in 1:10){
f(i)
}
)
# user system elapsed
# 0.003 0.000 10.013
上面我创建了一个每次执行需要1秒钟的函数f,如果我逐个处理,处理10次就需要10秒钟,当然处理一万次的话就需要10000秒钟。
mclapply