作者allen1985 (我要低调 拯救形象)
看板R_Language
标题Re: [问题] foreach 与 Parallel 回传多个matrix?
时间Fri Mar 10 11:19:18 2017
我之前的做法是 回传list
comb <- function(...){
mapply('rbind',..., SIMPLIFY = FALSE)
}
tmp <- foreach(i = 1:n, .combine = comb, multicombine = TRUE,
.init = list(list(),list())) %dopar% {
return(list(list.1, list.2))
}
※ 引述《celestialgod (天)》之铭言:
: ※ 引述《girl5566 (5566520)》之铭言:
: : 文章分类提示:
: : - 问题: 当你想要问问题时,请使用这个类别。
: : [问题类型]:
: : 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: : [软体熟悉度]:
: : 新手(没写过程式,R 是我的第一次)
: : [问题叙述]:
: : 原本程式会有两个global变数,去承接for loop内的数值,但由於效能的关系
: : 目前想把for loop改为 Parallel的方式,但仅查询到回传一个的方式,
: : 是有解法可以处理这种状况呢?
: : 原始情境:
: : df <- NULL
: : df1 <- NULL
: : for(i in 1:10000){
: : # 经运算後得到temp与temp1
: : temp <- c(1,2,3,4)
: : temp1 <- c(1,2,3,4)
: : df <- rbind(df,temp)
: : df1 <- rbind(df1, temp1)
: : }
: 我对foreach不熟,不过foreach如果接doParallel底层是用parLapplyLB
: 我这里直接用parallel的parLapplyLB直接示范怎麽做~~~
: library(parallel)
: cl <- makeCluster(detectCores()-1L)
: valueList <- parLapplyLB(cl, 1:150000, function(x){
: temp <- rnorm(4)
: temp1 <- rnorm(3)
: return(list(temp, temp1))
: })
: df <- do.call(rbind, lapply(valueList , `[[`, 1))
: df1 <- do.call(rbind, lapply(valueList , `[[`, 2))
: stopCluster(cl)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 162.237.102.128
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1489115961.A.DA5.html