2011-11-03 36 views
6

Tôi đang sử dụng gói doSMP R cùng với foreach loops.R - foreach vòng với verbose = TRUE

Tôi đã chỉ định verbose=TRUE làm đối số tùy chọn foreach được báo cáo là rất hữu ích khi chụp sự cố. Tôi đoán điều này là đúng: nó rất hữu ích ... nếu chúng ta hiểu ý nghĩa của nó.

Bạn có thể giải thích cho tôi thông báo sau được trả lại sau một lần lặp lại không.

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

EDIT

Tiếp theo yêu cầu Xu Wang, đây là một ví dụ làm việc tối thiểu.

library(doSMP) 

w <- startWorkers(2) 
registerDoSMP(w) 

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

stopWorkers(w) 
+1

Tốt hơn để liên hệ trực tiếp với nhà phát triển gói foreach. Chắc chắn các tài liệu gói không phải là rất sắp tới. –

+0

@Cart Witthoft: Ok Ok .. Cảm ơn! – Marco

+1

bạn có thể vui lòng đăng mã và dữ liệu của mình không? HOẶC chỉ là một ví dụ làm việc tối thiểu? –

Trả lời

3

Thông báo sau mỗi lần lặp được tạo bởi gói 'foreach'. Tôi đã phân tích mã gói (chủ yếu là tệp "foreach.R") và đã thực hiện một bản trình diễn được sửa đổi đôi chút, trong đó tôi sử dụng% do% thay vì% dopar%. Đọc mô tả đầu ra sau nhật ký.

--- log bắt đầu ---

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 

--- đăng nhập cuối ---

"numValues" là số nhiệm vụ đưa ra.
"numResults" là số kết quả nhận được. "đã dừng: FALSE" (hoặc "TRUE") chỉ đơn giản có nghĩa là foreach đã hoàn tất tất cả các lần lặp lại.
"trạng thái trả về FALSE" (hoặc "TRUE") hiển thị đầu ra từ hàm nội bộ (tới 'foreach') "complete()", kiểm tra xem tất cả công việc đã được thực hiện chưa. Tùy thuộc vào backend, thông báo "return status TRUE" có thể được hiển thị hoặc bỏ qua (doParallel backend không và doRedis backend đã in thông báo 'TRUE' trong các tình huống cụ thể của tôi).

Các vấn đề liên quan