Mam problem z uzyskaniem kodu do pracy z pakietem równoległym w R. Używam R 2.15.R równoległy błąd klasy S4 klastra
Oto uproszczony przykład ... Mam plik 'animal.R', który zawiera następujące elementy:
# 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]})
Następnie w moim terminalu R, biegnę:
library(parallel)
source('animal.R')
Rozpocznij lokalny klaster dwoma węzłami:
cl <- makeCluster(rep('localhost', 2))
Powiedz klastrze węzłów o klasie Zwierząt:
clusterEvalQ(cl, parse('animal.R'))
Następnie uruchom jakiś kod na klastrze:
# This works
parSapply(cl, list(daisy, fred), count)
# This doesn't...
parSapply(cl, list(daisy, fred), countAfterChopping)
Zatrzymaj klaster:
stopCluster(cl)
Pierwsze wywołanie parSapply działa zgodnie z oczekiwaniami, ale druga produkuje ten błąd:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
Jakieś pomysły, co się dzieje? Dlaczego drugie połączenie z PARSapply nie działa?
Kiedy 'parse' animal.R, masz unevaluated ekspresję, więc można użyć' clusterEvalQ (cl, eval (parse ('animal.R '))) 'lub po prostu źródło skryptu. Czy to wystarczy? – BenBarnes
Ach, tak ... to chyba wystarczy. Dziękuję bardzo! – Ash