缺省情况下,将清除掉雪人产生的输出,但是您可以使用makeCluster的“ outfile”选项进行更改。将outfile设置为空字符串(“”)将防止雪重定向输出,这通常会导致打印消息的输出显示在主进程的终端上。
只需使用以下命令创建并注册集群:
library(doSNOW)
cl <- makeCluster(4, outfile="")
registerDoSNOW(cl)
您的foreach循环根本不需要更改。
对于使用开放式MPI构建的Rmpi的SOCK群集和MPI群集,这都对我有效。在Windows上,如果使用Rgui,则不会看到任何输出。如果改用Rterm.exe,则可以。
请注意,除了您自己的输出之外,您还将看到snow产生的消息,这也可能有用。
要使用进度条,doSNOW版本1.0.14有一个progress
选项。这是一个完整的示例:
library(doSNOW)
library(tcltk)
library(randomForest)
cl <- makeSOCKcluster(3)
registerDoSNOW(cl)
ntasks <- 100
pb <- tkProgressBar(max=ntasks)
progress <- function(n) setTkProgressBar(pb, n)
opts <- list(progress=progress)
x <- matrix(runif(500), 100)
y <- gl(2, 50)
rf <- foreach(ntree=rep(25, ntasks), .combine=combine,
.multicombine=TRUE, .packages='randomForest',
.options.snow=opts) %dopar% {
randomForest(x, y, ntree=ntree)
}
该progress
选项相当笼统,因此您可以使用以下功能简单地打印消息:
progress <- function(n) cat(sprintf("task %d is complete\n", n))
该函数可以接受0、1或2个参数。提供的第一个参数是已完成任务的总数,第二个是刚刚完成的任务的任务号。
最简单的示例仅.
在任务完成时打印一个:
progress <- function() cat('.')
此示例同时显示了两个参数,可用于演示任务并非总是按顺序完成:
progress <- function(nfin, tag) {
cat(sprintf('tasks completed: %d; tag: %d\n', nfin, tag))
}