美文网首页R语言编程进阶
R 并行计算parallel 和foreach

R 并行计算parallel 和foreach

作者: caokai001 | 来源:发表于2019-12-06 20:23 被阅读0次

参考:https://zhuanlan.zhihu.com/p/24547984
https://blog.csdn.net/sinat_26917383/article/details/53349557


  • 要传递一个变量,您将必须使用lapply或sapply类似的并行版本。但是,要传递许多变量,必须使用mapply或的并行版本Map。那会是clusterMap
单变量:x 多变量:x,y,z
串行计算 lapply; sapply mapply,do.call
并行计算 foreach 包 ;mclapply(Linux)或parlapply foreach包;clusterMap

1.并行计算--单变量x

函数

fun <- function(x){
return (x+1);
}

1.parallel包

library(parallel)
#detectCores函数可以告诉你你的CPU可使用的核数
detectCores() 

r$> mc <- getOption("mc.cores", 3)                                                       
r$> system.time({ 
        res <- mclapply(1:10000, fun, mc.cores = mc); 
    });                                                                                                         
用户  系统  流逝 
0.002 0.057 0.069

2.foreach包

#加载foreach,doParallel
library(foreach)
library(doParallel)

#下面这行代码相当于sapply
cl <- makeCluster(3)
registerDoParallel(cl)

system.time({x <- foreach(x=1:10000,.combine='rbind') %dopar% fun(x);})
stopCluster(cl)

 用户  系统  流逝 
2.136 0.159 2.361 

2.多变量并行:x,y,z

fun2 <-function(x,y,z) {
    x+y+z
}

1.clusterMap

fun2 <-function(x,y,z) {
    x+y+z
}


# cluster <- makeCluster(detectCores())
cluster <- makeCluster(3)
clusterEvalQ(cluster, library(xts))
system.time({result <- clusterMap(cluster, fun2, x=1:1000, y=c(1:1000),z=5);})
df <- do.call('rbind', result)

用户  系统  流逝 
0.173 0.045 0.725

2.foreach

library(doParallel)

cl <- makeCluster(3)
registerDoParallel(cl)

system.time({r <-foreach(x=1:1000, y=c(1:1000),z=rep(5, 1000),.combine='rbind') %dopar% {
  x+y+z
};})
stopCluster(cl)

用户  系统  流逝 
0.245 0.014 0.281

相关文章

网友评论

    本文标题:R 并行计算parallel 和foreach

    本文链接:https://www.haomeiwen.com/subject/mbnegctx.html