Sto riscontrando un problema nel far funzionare il codice con il pacchetto parallelo in R. Sto usando R 2.15.Errore parallelo classe S4 S1
Ecco un esempio semplificato ... Ho un file 'animal.R', che contiene quanto segue:
# 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]})
Poi, nel mio terminale R, corro:
library(parallel)
source('animal.R')
Inizio un gruppo locale dei due nodi:
cl <- makeCluster(rep('localhost', 2))
Dite ai nodi del cluster sulla classe degli animali:
clusterEvalQ(cl, parse('animal.R'))
Poi eseguire del codice sul cluster:
# This works
parSapply(cl, list(daisy, fred), count)
# This doesn't...
parSapply(cl, list(daisy, fred), countAfterChopping)
arresto del cluster:
stopCluster(cl)
La prima chiamata a parSapply funziona come previsto, ma il secondo produce questo errore:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
Qualche idea cosa sta succedendo? Perché la seconda chiamata a parSapply non funziona?
Quando si 'parse' animal.R, si ottiene un'espressione non valutata, così da poter utilizzare sia clusterEvalQ (cl, eval (parse ('animal.R' '))) 'o semplicemente fonte la sceneggiatura. Questo ha fatto il trucco? – BenBarnes
Ah, sì ... sembra che faccia il trucco. Grazie mille! – Ash