2012-09-02 13 views
5

Bir pakete (yani, snow'dan başka bir pakete) bağlı bazı kodları (snow::parLapply kullanarak) paralelleştirmeye çalışıyorum. parLapply tarafından çağrılan işlevde başvurulan nesneler, clusterExport kullanılarak açıkça kümeye geçirilmelidir. clusterExportclusterExport içinde her bir işlevi (bir paketin kullanıcı işlevleri tarafından çağrılan iç işlevleri dahil) açıkça belirtmek yerine kümenin tamamına tüm bir paketi iletmenin bir yolu var mı?Tüm bir paketi bir kar kümesine geçirme

cevap

6

,

clusterApply(cl, library(thePackageYouUse)) 

Ben son R bültenleri ile gelir örnekler vardır parallel paketini düşünmek gibi yumurta şey tüm düğümlerde paketini yükleyin ve biri üzerinden kullanılabilir komutları tüm düğümlerde kodunuzu çağrı library(thePackageYouUse) var -

## 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

Teşekkür Dirk: - boot paket her yerde yüklendiği yerde help(clusterApply) burada örneğin bkz. ClusterExport (ls()) 'ın neden tehlikeli olacağı konusunda herhangi bir sebep var mı? Bu, işlevlerin paketlerden geçirilmesinde yardımcı olmaz, ancak bir dizi küresel değişkene dayanan döngüleri (benimkileri değil, benimki!) Hızla paralel hale getirmek için çok fazla baş ağrısından tasarruf eder. – Michael

+0

Sadece kötü tasarım bir scattershot artı mutfak lavabo yaklaşımı kullanır. Seri bir çözümde ihtiyacınız olanı tasarlayın, ardından paralel hale getirin. –

+0

Yeterince adil, yardım için teşekkürler. – Michael

İlgili konular