美文网首页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