Asignación global, paralelismo y foreach

Acabo de terminar de ejecutar un análisis de larga ejecución (más de 24 horas) en varios conjuntos de datos. Ya que soy perezoso y no quería tratar con múltiplesR sesiones y juntando los resultados después, los ejecuté en paralelo usandoforeach.

El análisis devuelve un entorno lleno de resultados (y objetos intermedios), por lo que intenté asignar los resultados a entornos globales, solo para encontrar que esto no funcionó. Aquí hay un código para ilustrar:

library(doMC)
library(foreach)
registerDoMC(3)

bigAnalysis <- function(matr) {
  results <- new.env()
  results$num1 <- 1
  results$m <- matrix(1:9, 3, 3)
  results$l <- list(1, list(3,4))

  return(results)
}

a <- new.env()
b <- new.env()
c <- new.env()

foreach(i = 1:3) %dopar% {
  if (i == 1) {
    a <<- bigAnalysis(data1)
    plot(a$m[,1], a$m[,2]) # assignment has worked here
  } else if (i == 2) {
    b <<- bigAnalysis(data2)
  } else {
    c <<- bigAnalysis(data3)
  }
}

# Nothing stored :(
ls(envir=a)
# character(0)

He usado la asignación global dentroforeach antes (dentro de una función) para rellenar matrices que había configurado de antemano con datos (donde no podía hacerlo bien con.combine), así que pensé que esto funcionaría.

EDITAR: Parece que esto solo funciona dentro del cuerpo de una función:

f <- function() {
  foreach(i = 1:3) %dopar% {
    if (i == 1) {
      a <<- bigAnalysis(data1)
    } else if (i == 2) {
      b <<- bigAnalysis(data2)
    } else {
      c <<- bigAnalysis(data3)
    }
  }
  d <- new.env()
  d$a <- a
  d$b <- b
  d$c <- c
  return(d)
}

¿Por qué funciona esto en una función, pero no en el entorno de nivel superior?

Respuestas a la pregunta(1)

Su respuesta a la pregunta