foreachとoptpar でRプログロラムを並列化
16CPUを使う場合
エラーが出る場合はoutfile=""
を消去するとうまくいく場合も
library(parallel) library(foreach) library(doParallel) x<-1:100 y<-1:100 v<-list(x,y) slow_square = function(x) { Sys.sleep(0.5) print(x * x) return(x * x) } #foreach(x = seq(1, 30), .combine = c) %do% { # slow_square(x) #} #cl = makeCluster(getOption("mc.cores", 2L), type = "FORK",outfile="") cores <- detectCores() #cl<-makeCluster(cores,type="PSOCK",outfile="") cl<-makeCluster(16,type="PSOCK",outfile="") vvv<-NULL clusterEvalQ(cl,{ #library(randomForest) #library(kernlab) #data(spam) #(vvv) }) vvv<-NULL registerDoParallel(cl) #vvv<-foreach(x = seq(1, 30), .combine = c) %dopar% { # slow_square(x) #} v<-c(3,2,3) vvv<-foreach(x = seq(1, 30), .combine = rbind,.multicombine =FALSE) %dopar% { a<-list(v,x,slow_square(x)) a } stopCluster(cl)
途中結果を表示される場合
ff=file(out_file,"w") close(ff) vvv<-foreach(x = seq(1, 30), .combine = rbind,.multicombine =FALSE) %dopar% { a<-list(v,x,slow_square(x)) ff=file(out_file,"a") cat(x,"\n",file=ff) a }