R - 使用verbose=TRUE的foreach循环

9
我正在使用 doSMP R包以及 foreach循环。我已经将 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 包的开发者。确实,该包的文档并不是很详尽。 - Carl Witthoft
1
你能否请提供你的代码和数据?或者只提供一个最小可行示例? - Xu Wang
@Marco,你有关于这个问题的回复吗?如果有的话,能否发布答案? - Solomon
1
@Solomon:我认为 doSMP 已经不再使用了。我改用 doMC。 - user7064
这个.verbose=TRUE选项输出的信息(“numValues...,numResults...,stopped...”)来自于foreach,它仍然是当前的,并为所有类型的后端提供并行循环。我们仍然需要知道例如“stopped=TRUE”的含义。 - dsb
1个回答

7
每次迭代后的消息是由 '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" 表示接收到的结果数量。
"stopped: FALSE"(或 "TRUE")表示 foreach 是否已经完成了所有迭代。
"returning status FALSE"(或 "TRUE")显示来自内部(对于 'foreach' 包)函数 "complete()" 的输出,该函数检查是否完成了所有工作。根据后端的不同,在我的特定情况下,“返回状态 TRUE”消息可能会被显示或跳过(doParallel 后端没有打印 'TRUE' 消息,而 doRedis 后端则打印了 'TRUE' 消息)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接