首页 > > > 【效率提升】R语言并行计算
parLapply(cl, x, FUN, ...)
mclapply(X, FUN, ..., mc.cores)fun <- function(x){
return (x+1);
}
system.time({
res <- lapply(1:5000000, fun);
});
user system elapsed
21.42 1.74 25.70#加载parallel包
library(parallel)
#detectCores函数可以告诉你你的CPU可使用的核数
clnum<-detectCores()
#设置参与并行的CPU核数目,这里我们使用了所有的CPU核,也就是我们刚才得到的clnum,具体到这个案例,clnum=4
cl <- makeCluster(getOption("cl.cores", clnum));
#运行
system.time({
res <- parLapply(cl, 1:5000000, fun)
});
user system elapsed
6.54 0.34 19.95
#关闭并行计算
stopCluster(cl);mc <- getOption("mc.cores", 3)
system.time({
res <- mclapply(1:5000000, fun, mc.cores = mc);
});
user system elapsed
6.657 0.500 7.181foreach包也是在并行计算中经常被使用的包,主要是对原本的for循环进行并行运算。使用方法如下:
#加载foreach
library(foreach)
#下面这行代码相当于sapply
x <- foreach(x=1:1000,.combine='rbind') %do% func(x)
#注意1:x后面是等号不是“in”,“.combine"表示合并方式,rbind就是按行成矩阵(data.frame),如果不填,默认返回一个list。
#注意2:foreach函数后面要跟 %do% + 每次执行的函数
library(doparallel)
# 启用parallel作为foreach并行计算的后端
library(doParallel)
cl <- makeCluster(4)
registerDoParallel(cl)
# 并行计算方式
x <- foreach(x=1:1000,.combine='rbind') %dopar% func(x)
#别忘了结束并行
stopCluster(cl)更多内容请关注我的专栏:R语言与数据挖掘 - 知乎专栏
或者关注我的知乎账号:温如
对量化交易(投资)感兴趣的也可以关注专栏:清华大学量化投资协会成果集萃 - 知乎专栏
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3170123/ ,如需转载,请注明出处,否则将追究法律责任。