Ошибка вызова функции сериализации R

Я загружаю следующие пакеты в R:

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

Я "распараллеливаю" код в течение длительного времени, но в последнее время я получаю прерывания INTERMITTENT во время выполнения кода. Ошибка:

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

Мое обоснованное предположение состоит в том, что, возможно, истек срок действия соединения, которое я открываю с помощью приведенных ниже команд:

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

Глядя на справочную страницу makeCluster, я вижу, что по умолчанию срок действия соединений истекает только через 30 дней! Я мог бы установить параметры (ошибка = восстановление), чтобы на лету проверить, открыто ли соединение, или нет, когда код останавливается, но я решил опубликовать этот общий вопрос раньше.

ВАЖНЫЙ:

1) ошибка действительно прерывистая, иногда я перезапускаю один и тот же код и не получаю ошибок. 2) Я запускаю все на одной и той же многоядерной машине (Intel / 8 ядер). Так что это не проблема общения (сети) среди кластеров. 3) Я интенсивно использую распараллеливание CPU и GPU на своем ноутбуке и десктопе (64 ядра). К сожалению, я впервые получаю такую ошибку.

Кто-нибудь имеет такой же тип ошибки?

По запросу я предоставляю свой 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, ниже ошибки в одном из вызовов (снова с перебоями):

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

Добавив немного больше информации. Я установил параметры (ошибка = восстановление), и он предоставил следующую информацию:

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

Я попытался проверить, были ли подключения все еще доступны, и есть:

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]> 

Поскольку соединения открыты, а ошибка 0 означает версию R (на что указывает @SteveWeston), я действительно не могу понять, что здесь происходит.

РЕДАКТИРОВАТЬ 1:

МОЙ РЕШЕНИЕ ДЛЯ ПРОБЛЕМЫ

Код хорош с точки зрения аргументов, передаваемых функции. Таким образом, ответ, предоставленный @MichaelFilosi, не принес много пользы. В любом случае, большое спасибо за ваш ответ!

Я не мог найти точно, что было не так с звонком, но, по крайней мере, я мог обойти проблему.

Хитрость заключалась в том, чтобы разбить аргументы вызова функции для каждого параллельного потока на более мелкие блоки.

Волшебным образом ошибка исчезла.

Дайте мне знать, если то же самое сработало для вас!

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

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