Error al llamar a la función serializar R

Estoy cargando los siguientes paquetes en R:

library(foreach)
library(doParallel)
library(iterators)

He "paralelizado" el código durante mucho tiempo, pero últimamente recibo INTERMITENTES paradas mientras el código se está ejecutando. El error es:

Error in serialize(data, node$con) : error writing to connection

Mi conjetura adivinada es que tal vez la conexión que abro usando los comandos a continuación, ha caducado:

## Register Cluster
##
cores<-8
cl <- makeCluster(cores)
registerDoParallel(cl)

Al mirar la página de manual de makeCluster veo que, de forma predeterminada, ¡las conexiones caducan solo después de 30 días! Podría establecer opciones (error = recuperar) para verificar, sobre la marcha, si la conexión está abierta o no cuando el código se detiene, pero decidí publicar esta pregunta general antes.

IMPORTANTE:

1) el error es realmente intermitente, a veces vuelvo a ejecutar el mismo código y no obtengo errores. 2) Ejecuto todo en la misma máquina multi-core (Intel / 8 cores). Entonces, no es un problema de comunicación (red) entre los clusters. 3) Soy un gran usuario de CPU y GPU en paralelo, en mi computadora portátil y de escritorio (64 núcleos) Lamentablemente, es la primera vez que recibo este tipo de error.

¿Alguien tiene el mismo tipo de error?

Según lo solicitado, estoy proporcionando mi sessionInfo ():

> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

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

other attached packages:
[1] TTR_0.22-0       xts_0.9-3        doParallel_1.0.1 iterators_1.0.6  foreach_1.4.0    zoo_1.7-9        Revobase_6.2.0   RevoMods_6.2.0  

loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_2.15.3 grid_2.15.3     lattice_0.20-13 tools_2.15.3   

@SeteveWeston, debajo del error en una de las llamadas (nuevamente, es intermitente):

starting worker pid=8808 on localhost:10187 at 15:21:52.232
starting worker pid=5492 on localhost:10187 at 15:21:53.624
starting worker pid=8804 on localhost:10187 at 15:21:54.997
starting worker pid=8540 on localhost:10187 at 15:21:56.360
starting worker pid=6308 on localhost:10187 at 15:21:57.721
starting worker pid=8164 on localhost:10187 at 15:21:59.137
starting worker pid=8064 on localhost:10187 at 15:22:00.491
starting worker pid=8528 on localhost:10187 at 15:22:01.855
Error in unserialize(node$con) : 
  ReadItem: unknown type 0, perhaps written by later version of R
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted

Añadiendo un poco más de información. Configuré las opciones (error = recuperar) y proporcioné la siguiente información:

Error in serialize(data, node$con) : error writing to connection

Enter a frame number, or 0 to exit   

1: #51: parallelize(FUN = "ensemble.prism", arg = list(prism = iis.long, instances = oos.instances), vectorize.arg = c("prism", "instances"), cores = cores, .export 
2: parallelize.R#58: foreach.bind(idx = i) %dopar% pFUN(idx)
3: e$fun(obj, substitute(ex), parent.frame(), e$data)
4: clusterCall(cl, workerInit, c.expr, exportenv, obj$packages)
5: sendCall(cl[[i]], fun, list(...))
6: postNode(con, "EXEC", list(fun = fun, args = args, return = return, tag = tag))
7: sendData(con, list(type = type, data = value, tag = tag))
8: sendData.SOCKnode(con, list(type = type, data = value, tag = tag))
9: serialize(data, node$con)

Selection: 9

Intenté verificar si las conexiones todavía estaban disponibles, y hay:

Browse[1]> showConnections()
   description                class      mode  text     isopen   can read can write
3  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
4  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
5  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
6  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
7  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
8  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
9  "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
10 "<-www.007guard.com:10187" "sockconn" "a+b" "binary" "opened" "yes"    "yes"    
Browse[1]> 

Ya que las conexiones están abiertas y el error 0 significa la versión R (como lo señaló @SteveWeston), realmente no puedo; t averiguar qué está pasando aquí.

EDITAR 1:

Mi solución al problema

El código está bien en términos de argumentos pasados ​​a la función. Por lo tanto, la respuesta proporcionada por @MichaelFilosi no ha aportado mucho a la mesa. De cualquier manera, muchas gracias por tu respuesta!

No pude encontrar exactamente lo que estaba mal con la llamada, pero, al menos, podría solucionar el problema.

El truco consistía en dividir los argumentos de la llamada de función, para cada hilo paralelo, en bloques más pequeños.

Mágicamente el error desapareció.

Déjame saber si lo mismo funcionó para ti!

Respuestas a la pregunta(5)

Su respuesta a la pregunta