Как вывести сообщение в снегопад?

Я провожу исследование моделирования с использованием пакета Snowfall в Windows 7.

Мне нравится распечатывать сообщение для каждых 10 запусков на главную консоль R, чтобы отслеживать прогресс, но это не так. т.е. ничего не печатается

Любая помощь будет высоко ценится.

runsim = function(nsim,n,mean,var){
cov = 0
for(i in 1:nsim){
if ( i %% 10==0) 
cat("\n Running simulation",i)
dat = function1(n,mean,var)

cov = ...
}
cov / nsim
}
sfExport("function1","runsim")
sfLibrary(library1)

wrapper = function(n){
runsim(100,n,0.5,0.25)
}

Out<-sfLapply(1:100,wrapper)

person Tony    schedule 14.01.2012    source источник
comment
Вам, вероятно, понадобится sfCat.   -  person Roman Luštrik    schedule 14.01.2012
comment
@Roman: Я попробовал ваше предложение, заменив cat vt sfCat. Я получил следующее сообщение об ошибке Error in checkForRemoteErrors(val) : 2 nodes produced errors; first error: could not find function "sfCat" Есть идеи, как это исправить? Спасибо   -  person Tony    schedule 14.01.2012
comment
Можно попробовать загрузить снегопад в воркеры с помощью sfLibrary. sfCat является частью Snowfall, и пакеты по умолчанию не загружаются в Workers.   -  person Paul Hiemstra    schedule 14.01.2012
comment
@Paul Спасибо за предложение. На этот раз сообщения об ошибке нет, но опять ничего не печатается   -  person Tony    schedule 14.01.2012


Ответы (1)


Отметьте ?sfCat и найдите строку, в которой говорится:

sfCat — это функция отладки, выводящая сообщение на все ведомые устройства (которые появляются в лог-файлах).

Это говорит нам о том, что нам нужно включить регистрацию в вызове sfInit (аргумент slaveOutfile). Затем каждый вызов sfCat() будет выгружать данные в указанный вами файл журнала. Я тоже долго разбирался в этом ;-)

Пример кода

if (!require("snowfall")) {
    install.packages("snowfall")
    require("snowfall")
}

sfInit(parallel=TRUE, cpus=4, slaveOutfile="test.txt")
sfLibrary("snowfall", character.only=TRUE)

res <- sfClusterApplyLB(1:100, function(x) {
    sfCat(paste("Iteration ", x), sep="\n")
})
sfStop()

Выход ./test.txt

[...]

Calling a snowfall function without calling 'sfInit' first or after sfStop().
'sfInit()' is called now.
snowfall 1.84 initialized: sequential execution, one CPU.

Iteration  4
Type: EXEC 
Iteration  92
Type: EXEC 
Iteration  94
Type: EXEC 
Iteration  96
Type: EXEC 
Iteration  98
Type: EXEC 
Iteration  100
ype: EXEC 
Iteration  29
Type: EXEC 
Iteration  31
Type: EXEC 
Iteration  33
Type: EXEC 
Iteration  35
Type: EXEC 
Iteration  37
Type: EXEC 
Iteration  39
Type: EXEC 
Iteration  41
Type: EXEC 
Iteration  43
Type: EXEC 
Iteration  45
Type: EXEC 
Iteration  47
Type: EXEC 
Iteration  49
Type: EXEC 
Iteration  51
Type: EXEC 
Iteration  53
Type: EXEC 
Iteration  55
Type: EXEC 
Iteration  57
Type: EXEC 
Iteration  59
Type: EXEC 
Iteration  61
Type: EXEC 
Iteration  63
Type: EXEC 
Iteration  65
Type: EXEC 
Iteration  67
Type: EXEC 
Iteration  69
Type: EXEC 
Iteration  71
Type: EXEC 
Iteration  73
Type: EXEC 
Iteration  75
Type: EXEC 
Iteration  77
Type: EXEC 
Iteration  79
Type: EXEC 
Iteration  81
Type: EXEC 
Iteration  83
Type: EXEC 
Iteration  85
Type: EXEC 
Iteration  87
Type: EXEC 
Iteration  89
Type: EXEC 
Iteration  91
Type: EXEC 
Iteration  93
Type: EXEC 
Iteration  95
Type: EXEC 
Iteration  97
Type: EXEC 
Iteration  99
 EXEC 
Iteration  74
Type: EXEC 
Iteration  76
Type: EXEC 
Iteration  78
Type: EXEC 
Iteration  80
Type: EXEC 
Iteration  82
Type: EXEC 
Iteration  84
Type: EXEC 
Iteration  86
Type: EXEC 
Iteration  88
Type: EXEC 
Iteration  90

Собственный вопрос

Кто-нибудь знает, как «управлять» конкретными вещами, которые попадают в файл журнала? Например, было бы неплохо включить информацию о том, какой работник завершил какую работу и т. д.

person Rappster    schedule 07.03.2012
comment
В чем разница между снегопадом и doSnow? - person skan; 17.06.2016
comment
Я нашел функцию Sys.getpid(), вывод которой я добавляю к sfCat для идентификации работника. Например: sfCat(Sys.getpid(), msg) - person Bruno Zamengo; 18.12.2017