У меня возникла проблема с кодом для работы с пакетом parallel в R. Я использую R 2.15.
Вот упрощенный пример... У меня есть файл 'animal.R', который содержит следующее:
# animal.R
setClass("Animal", representation(species = "character", legs = "numeric"))
##Define some Animal methods
setGeneric("count",function(x) standardGeneric("count"))
setMethod("count", "Animal", function(x) { x@legs})
setGeneric("countAfterChopping",function(x) standardGeneric("countAfterChopping"))
setMethod("countAfterChopping", "Animal", function(x) { x@legs <- x@legs-1; x@legs})
Затем в моем терминале R я запускаю:
library(parallel)
source('animal.R')
Запускаю локальный кластер из двух узлов:
cl <- makeCluster(rep('localhost', 2))
] Сообщите узлам кластера о классе Animal:
clusterEvalQ(cl, parse('animal.R'))
Затем запустите некоторый код в кластере:
# This works
parSapply(cl, list(daisy, fred), count)
# This doesn't...
parSapply(cl, list(daisy, fred), countAfterChopping)
Остановите кластер:
stopCluster(cl)
Первый вызов parSapply работает, как и ожидалось, но второй выдает эту ошибку:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
Есть идеи, что происходит? Почему не работает второй вызов parSapply?