Dane wyjściowe produkowane przez pracowników śniegu są domyślnie odrzucane, ale można użyć opcji "outfile" makeCluster, aby to zmienić. Ustawienie pliku wyjściowego na pusty ciąg znaków ("") zapobiegnie przekierowaniu śniegu na wyjście, co często spowoduje, że dane wyjściowe z twoich komunikatów drukowania pojawią się na terminalu procesu głównego.
Wystarczy utworzyć i zarejestrować klastra z czymś takim:
library(doSNOW)
cl <- makeCluster(4, outfile="")
registerDoSNOW(cl)
pętla foreach nie trzeba wcale zmieniać.
Działa to dla mnie z obu klastrów SOCK i klastrów MPI za pomocą Rmpi zbudowany z Open MPI. W systemie Windows nie zobaczysz żadnych danych wyjściowych, jeśli używasz Rgui. Jeśli użyjesz programu Rterm.exe, zrobisz to.
Pamiętaj, że oprócz własnych wyników zobaczysz wiadomości wyprodukowane przez śnieg, które również mogą być przydatne.
Aby użyć paska postępu, doSNOW wersja 1.0.14 posiada opcję progress
. Powyżej znajduje się pełna przykład:
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)
}
Opcja progress
jest dość ogólny, więc można po prostu wydrukować wiadomość przy użyciu funkcji takich jak:
progress <- function(n) cat(sprintf("task %d is complete\n", n))
Funkcja może mieć 0, 1 lub 2 argumenty. Pierwszy dostarczony argument to całkowita liczba zakończonych zadań, a drugi to numer zadania, które właśnie się zakończyło.
Najprostszym przykładem prostu drukuje .
gdy zadanie kończy:
progress <- function() cat('.')
Ten przykład pokazuje oba argumenty i może być stosowane do wykazania, że zadania nie zawsze są zakończone w kolejności:
progress <- function(nfin, tag) {
cat(sprintf('tasks completed: %d; tag: %d\n', nfin, tag))
}
ah, ale to jest drukowanie, po prostu nie na głównym węźle ... –
oh, okay. W takim razie czy istnieje sposób, w jaki mogę zobaczyć, co jest drukowane lub czy jest drukowane do węzła głównego? – someoneHuman
Nie znam żadnych i nie jestem pewien, jak można to zrobić. –