Есть ли способ вырваться из цикла foreach?

Я использую пакет Rforeach() с участием%dopar% делать длинные (~ дни) расчеты параллельно. Мне бы хотелось, чтобы была возможность остановить весь набор вычислений в случае, если один из них выдает ошибку. Однако я не нашел способа добиться этого, и из документации и различных форумов я не нашел никаких признаков того, что это возможно. В частности,break() не работает иstop() останавливает только текущий расчет, а не весьforeach петля.

Обратите внимание, что я не могу использовать простой цикл for, потому что в конечном итоге я хочу распараллелить это с помощью пакета doRNG.

Вот упрощенная, воспроизводимая версия того, что я пытаюсь сделать (показано здесь в%do%, но у меня такая же проблема при использованииdoRNG а также%dopar%). Обратите внимание, что в действительности я хочу запустить все элементы этого цикла (здесь 10) параллельно.

library(foreach)
myfunc <- function() {
  x <- foreach(k = 1:10, .combine="cbind", .errorhandling="stop") %do% {
    cat("Element ", k, "\n")
    Sys.sleep(0.5) # just to show that stop does not cause exit from foreach
    if(is.element(k, 2:6)) {
      cat("Should stop\n")
      stop("Has stopped")
    }
    k
  }
  return(x)
}
x <- myfunc()
# stop() halts the processing of k=2:6, but it does not stop the foreach loop itself.
# x is not returned. The execution produces the error message
# Error in { : task 2 failed - "Has stopped"

Чего я хотел бы добиться, так это чтобы весь цикл foreach мог быть немедленно завершен при некотором условии (здесь, когдаstop() встречается).

Я не нашел способа достичь этого сforeach, Похоже, мне нужен способ отправить сообщение всем другим процессам, чтобы они тоже остановились.

Если не возможно сforeachКто-нибудь знает альтернативы? Я также пытался добиться этого сparallel::mclapply, но это тоже не работает.

> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] C/UTF-8/C/C/C/C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods base

other attached packages:
[1] foreach_1.4.0

loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_3.0.0  iterators_1.0.6

Ответы на вопрос(5)

Ваш ответ на вопрос