R — циклы foreach с подробным =TRUE

#r #foreach

#r #foreach

Вопрос:

Я использую doSMP R-пакет вместе с foreach loops .

Я указал verbose=TRUE в качестве необязательного аргумента foreach , который, как сообщается, очень полезен для устранения неполадок. Я думаю, это правда: это очень полезно … если мы понимаем, что это значит.

Не могли бы вы, пожалуйста, объяснить мне следующее сообщение, которое возвращается после итерации.

 got chunk of 1 result(s) starting at # 1
numValues: 2, numResults: 1, stopped: TRUE
returning status FALSE
  

Редактировать

Следуя требованию Сюй Вана, вот минимальный рабочий пример.

 library(doSMP)

w <- startWorkers(2)
registerDoSMP(w)

root <- foreach(i=1:2, .verbose=TRUE) %dopar%
{
  sqrt(i)
}

stopWorkers(w)
  

Комментарии:

1. Лучше связаться с разработчиком пакета foreach напрямую. Конечно, документация по пакету не очень доступна.

2. не могли бы вы опубликовать свой код и данные? ИЛИ просто минимальный рабочий пример?

3. @Marco, ты слышал ответ на это? Если да, можете ли вы опубликовать ответ?

4. @Solomon: я думаю, что doSMP больше не используется. Вместо этого я использую doMC.

5. Это .verbose=TRUE выходное сообщение («numValues …, numResults …, stopped …) от foreach , которое все еще является текущим и обеспечивает параллельный цикл для всех видов серверных частей. Нам все еще нужно знать, что, например, означает «остановлено = TRUE».

Ответ №1:

Сообщение после каждой итерации создается пакетом foreach. Я проанализировал код пакета (в основном файл «foreach.R») и сделал слегка измененную демонстрацию, в которой я использую %do% вместо %dopar% . Прочитайте описание вывода после журнала.

— начало журнала —

 foreach(i=1:2, .verbose=TRUE) %do% { sqrt(i) }
evaluation # 1:
$i
[1] 1

result of evaluating expression:
[1] 1
got results for task 1
numValues: 1, numResults: 1, stopped: FALSE
returning status FALSE
evaluation # 2:
$i
[1] 2

result of evaluating expression:
[1] 1.414214
got results for task 2
numValues: 2, numResults: 2, stopped: FALSE
returning status FALSE
numValues: 2, numResults: 2, stopped: TRUE
calling combine function
evaluating call object to combine results:
  fun(accum, result.1, result.2)
[[1]]
[1] 1

[[2]]
[1] 1.414214
  

— конец журнала —

«numValues» — это количество запущенных задач.
«numResults» — это количество полученных результатов.
«остановлено: FALSE» (или «TRUE») просто означает, завершил ли foreach все итерации.
«возвращает статус FALSE» (или «TRUE») отображает вывод внутренней (для пакета foreach) функции «complete ()», которая проверяет, была ли выполнена вся работа. В зависимости от серверной части может отображаться или пропускаться сообщение «возвращающий статус TRUE» (серверная часть doParallel этого не сделала, а серверная часть doRedis напечатала сообщение «TRUE» в моих конкретных ситуациях).