Tengo un problema para conseguir que funcione un código con el paquete paralelo en R. Estoy usando R 2.15.R error de cluster de clase S4 paralelo
Aquí hay un ejemplo simplificado ... Tengo un archivo 'animal.R', que contiene lo siguiente:
# animal.R
setClass("Animal", representation(species = "character", legs = "numeric"))
##Define some Animal methods
setGeneric("count",function(x) standardGeneric("count"))
setMethod("count", "Animal", function(x) { [email protected]})
setGeneric("countAfterChopping",function(x) standardGeneric("countAfterChopping"))
setMethod("countAfterChopping", "Animal", function(x) { [email protected] <- [email protected]; [email protected]})
Luego, en mi terminal R, corro:
library(parallel)
source('animal.R')
de inicio un grupo local de los dos nodos:
cl <- makeCluster(rep('localhost', 2))
Diga a los nodos del clúster acerca de la clase de animales:
clusterEvalQ(cl, parse('animal.R'))
entonces ejecutar algún código en el clúster:
# This works
parSapply(cl, list(daisy, fred), count)
# This doesn't...
parSapply(cl, list(daisy, fred), countAfterChopping)
Detener el clúster:
stopCluster(cl)
La primera llamada a parSapply funciona como se esperaba, pero el segundo produce este error:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
¿Alguna idea de lo que está pasando? ¿Por qué no funciona la segunda llamada a parSapply?
Cuando 'parse' animal.R, se obtiene una expresión sin evaluar, por lo que podría o bien usar' clusterEvalQ (cl, eval (análisis sintáctico ('animal.R '))) 'o solo fuente el script. ¿Eso hizo el truco? – BenBarnes
Ah, sí ... eso parece hacer el truco. ¡Muchas gracias! – Ash