English 中文(简体)
在 Windows 上使用 doSNOW 的 R 的平行计算: 如何将数据组的结果传输回主控
原标题:Parallel computing in R on Windows using doSNOW: How to transfer results from clusters back to master

当在 Windows 上使用 R 中的数据组时, 我试图找到一个简单的方法将数据组的结果从数据组转换到主机。 如果结果是一个数组或一个简单数字, 则对每个 /% dopar% 语句的.combine 选项会处理此事, 但是如果结果是一个复杂的对象, 如果结果是一个复杂的对象, 则让这样一个随机Forest 模型, 如何将整个模型从奴隶组转换回主机?

我尝试使用 env=. global 来与 env=. global 进行拼接,但是对我的 Windows 7 没用。

最后,我通过保存对象以存档来工作。然后主人可以收回对象。如果有人知道更优雅的方法或者为什么屁股不工作,我很感激你的评论。

样本代码 :

print(" paralelize with 8 cores ------------------------------")
library(doSNOW)
cl<-makeCluster(8)
registerDoSNOW(cl)
clusterEvalQ(cl, library(randomForest))
clusterExport(cl, "x")
clusterExport(cl, "y")
clusterExport(cl, "x.selected")

makeModel <- function(i){
  m <- randomForest(x,x.selected[i,],mtry=250,sampsize=3200,ntree = 3000,do.trace=TRUE) 
  eval(parse(text = paste("model_",i," <- m",sep="")))
  eval(parse( text =paste("save(model_", i, ", file ="model_", i, ".Rdata")",sep="" ) ))
}

foreach(i = 1:length(x.selected[,1]),.verbose = TRUE ) %dopar% makeModel(i)
stopCluster(cl)

foreach(i = 1:length(x.selected[,1]),.verbose = TRUE ) %do% 
load(paste("model_",i,".RData",sep=""))
问题回答

如果您不指定.combine 函数, 每个人将返回一个列表, 以便处理任意对象, 就像 CroupApply 函数一样 。 许多前例都使用 < code>.combine= "c" , 但是这不会对随机 Forest 模型对象起作用 。 如果 leach 环体对随机 Forest 模型对象进行评价, 则每个对象都会返回这些对象的列表 。

这里是一个随机Forest 示例的简化版本, 从每个前方的软件包中返回列表中的模型对象, 并随后将其合并。 我还对它进行了修改, 以便使用 doSNOW 软件包, 如您的例子 :

library(doSNOW)
library(randomForest)
cl <- makeCluster(8)
registerDoSNOW(cl)
nr <- 1000
x <- matrix(runif(100000), nr)
y <- gl(2, nr/2)
rf <- foreach(ntree=rep(125, 8), .packages= randomForest ) %dopar% {
  randomForest(x, y, ntree=ntree)
}
crf <- do.call( combine , rf)
print(crf)
stopCluster(cl)




相关问题
How to plot fitted model over observed time series

This is a really really simple question to which I seem to be entirely unable to get a solution. I would like to do a scatter plot of an observed time series in R, and over this I want to plot the ...

REvolution for R

since the latest Ubuntu release (karmic koala), I noticed that the internal R package advertises on start-up the REvolution package. It seems to be a library collection for high-performance matrix ...

R - capturing elements of R output into text files

I am trying to run an analysis by invoking R through the command line as follows: R --no-save < SampleProgram.R > SampleProgram.opt For example, consider the simple R program below: mydata =...

R statistical package: wrapping GOFrame objects

I m trying to generate GOFrame objects to generate a gene ontology mapping in R for unsupported organisms (see http://www.bioconductor.org/packages/release/bioc/vignettes/GOstats/inst/doc/...

Changing the order of dodged bars in ggplot2 barplot

I have a dataframe df.all and I m plotting it in a bar plot with ggplot2 using the code below. I d like to make it so that the order of the dodged bars is flipped. That is, so that the bars labeled "...

Strange error when using sparse matrices and glmnet

I m getting a weird error when training a glmnet regression. invalid class "dgCMatrix" object: length(Dimnames[[2]]) must match Dim[2] It only happens occasionally, and perhaps only under larger ...

Generating non-duplicate combination pairs in R

Sorry for the non-descriptive title but I don t know whether there s a word for what I m trying to achieve. Let s assume that I have a list of names of different classes like c( 1 , 2 , 3 , 4 ) ...

Per panel smoothing in ggplot2

I m plotting a group of curves, using facet in ggplot2. I d like to have a smoother applied to plots where there are enough points to smooth, but not on plots with very few points. In particular I d ...

热门标签