Редактировать: После обновления в пакете doSNOW стало довольно просто отображать хороший индикатор выполнения при использовании %dopar%
, и он работает в Linux, Windows и OS X
doSNOW
теперь официально поддерживает индикаторы выполнения с помощью аргумента .options.snow
.
library(doSNOW)
cl <- makeCluster(2)
registerDoSNOW(cl)
iterations <- 100
pb <- txtProgressBar(max = iterations, style = 3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress = progress)
result <- foreach(i = 1:iterations, .combine = rbind,
.options.snow = opts) %dopar%
{
s <- summary(rnorm(1e6))[3]
return(s)
}
close(pb)
stopCluster(cl)
Еще один способ отслеживания прогресса, если учитывать общее количество итераций, - этоустановите .verbose = T
, так как это выведет на консоль, какие итерации были завершены.
Предыдущее решение для Linux и OS X
В Ubuntu 14.04 (64-разрядная версия) иOS X (El Capitan) индикатор выполнения отображается даже при использовании %dopar%
, если в makeCluster
установлена функция oufile = ""
.Кажется, он не работает под Windows.Из справки makeCluster
:
outfile: Куда направить выходные данные подключения stdout и stderr от рабочих.«» указывает на отсутствие перенаправления (которое может быть полезно только для рабочих на локальной машине).По умолчанию используется значение «/ dev / null» («nul:» в Windows).
Пример кода:
library(foreach)
library(doSNOW)
cl <- makeCluster(4, outfile="") # number of cores. Notice 'outfile'
registerDoSNOW(cl)
iterations <- 100
pb <- txtProgressBar(min = 1, max = iterations, style = 3)
result <- foreach(i = 1:iterations, .combine = rbind) %dopar%
{
s <- summary(rnorm(1e6))[3]
setTxtProgressBar(pb, i)
return(s)
}
close(pb)
stopCluster(cl)
Это - это индикатор выполненияпохоже.Это выглядит немного странно, так как новая полоса печатается для каждой последовательности полос и потому, что рабочий может немного отставать, что иногда приводит к тому, что полоса прогресса перемещается взад и вперед.