2012-09-02 13 views
5

Próbuję parallelize (używając snow::parLapply) jakiś kod, który zależy od pakietu (czyli pakiet inne niż snow). Przedmioty użyte w funkcji zwanej przez parLapply musi być wyraźnie przekazane do klastra przy użyciu clusterExport. Czy istnieje jakiś sposób, aby przekazać cały pakiet do klastra zamiast jawnie nazwać każdą funkcję (łącznie z wewnętrznymi funkcjami pakiet nazywa się funkcjami użytkownika!) W clusterExport?Przechodząc cały pakiet do klastra śniegu

Odpowiedz

6

zainstalować pakiet na wszystkich węzłach i mieć połączenie kodu library(thePackageYouUse) na wszystkich węzłach za pomocą jednego z dostępnych poleceń, jajko coś podobnego

clusterApply(cl, library(thePackageYouUse)) 

myślę pakiet parallel, która pochodzi z ostatnich wydań R ma przykłady - - patrz na przykład tu od help(clusterApply) gdzie pakiet boot ładowany jest wszędzie:

## A bootstrapping example, which can be done in many ways: 
clusterEvalQ(cl, { 
    ## set up each worker. Could also use clusterExport() 
    library(boot) 
    cd4.rg <- function(data, mle) MASS::mvrnorm(nrow(data), mle$m, mle$v) 
    cd4.mle <- list(m = colMeans(cd4), v = var(cd4)) 
    NULL 
}) 
+1

Dzięki Dirk. Czy są jakieś powody, dla których wykonanie 'clusterExport (ls())' byłoby niebezpieczne? To nie pomoże w przejściu funkcji z pakietami, ale byłoby to zaoszczędzić sporo bólu głowy szybko parallelize pętli (kogoś innego, nie moje!), Które polegają na tonę zmiennych globalnych. – Michael

+0

To tylko zły projekt w tym, że wykorzystuje się zróżnicowane podejście oraz kuchennego zlewu. Zaprojektuj to, czego potrzebujesz w rozwiązaniu szeregowym, a następnie wykonaj to równolegle. –

+0

Wystarczająco fair, dziękuję za pomoc. – Michael

Powiązane problemy