#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» в моих конкретных ситуациях).