¿Hay alguna manera de salir de un bucle foreach?

Estoy usando el paquete Rforeach() con%dopar% hacer cálculos largos (~ días) en paralelo. Me gustaría poder detener todo el conjunto de cálculos en caso de que uno de ellos produzca un error. Sin embargo, no he encontrado una forma de lograrlo, y a partir de la documentación y varios foros no he encontrado ninguna indicación de que esto sea posible. En particular,break() no funciona ystop() Sólo detiene el cálculo actual, no el todo.foreach lazo.

Tenga en cuenta que no puedo usar un bucle for simple, porque en última instancia quiero paralelizar esto utilizando el paquete doRNG.

Aquí hay una versión simplificada y reproducible de lo que estoy intentando (se muestra aquí en serie con%do%, pero tengo el mismo problema al usardoRNG y%dopar%). Tenga en cuenta que en realidad quiero ejecutar todos los elementos de este bucle (aquí 10) en paralelo.

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"

Lo que me gustaría lograr es que todo el bucle foreach se pueda salir inmediatamente en alguna condición (aquí, cuando elstop() se encuentra).

No he encontrado manera de lograr esto conforeach. Parece que necesitaría una forma de enviar un mensaje a todos los demás procesos para que también se detengan.

Si no es posible conforeach¿Alguien sabe de alternativas? También he tratado de lograr esto conparallel::mclapply, pero eso tampoco funciona.

> 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

Respuestas a la pregunta(5)

Su respuesta a la pregunta