2011-11-03 191 views
6

我正在使用doSMP R包以及foreach loopsR - 帶有verbose = TRUE的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軟件包開發人員。當然,軟件包文檔並不是非常適合。 –

+0

@卡特Witthoft:好的,好的..謝謝! – Marco

+1

可以請你發佈你的代碼和數據嗎?或者只是一個最小的工作示例? –

回答

3

每次迭代後的消息都是由'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」是收到的結果數量。
「停止:假」(或「真」)只是意味着foreach是否已完成所有迭代。
「返回狀態FALSE」(或「TRUE」)顯示內部(至'foreach'包)函數「complete()」的輸出,該函數檢查所有工作是否已完成。根據後端,消息「正在返回狀態TRUE」可能會顯示或跳過(doParallel後端沒有,doRedis後端確實在我的特殊情況下打印了'TRUE'消息)。