2012-09-02 3 views
5

패키지 (즉, snow 이외의 패키지)에 의존하는 코드를 병렬 처리 (snow::parLapply)하려고합니다. parLapply에 의해 호출 된 함수에서 참조되는 개체는 clusterExport을 사용하여 명시 적으로 클러스터로 전달되어야합니다. clusterExport에 모든 기능 (패키지의 내부 기능인 사용자 기능에 의해 호출 됨)을 명시 적으로 지정하지 않고 전체 패키지를 클러스터에 전달할 수있는 방법이 있습니까?스노우 클러스터에 전체 패키지 전달하기

답변

6

clusterApply(cl, library(thePackageYouUse)) 

내가 최근 R의 출시와 함께 제공 사례가있는 parallel 패키지를 생각 같은 계란 뭔가를 모든 노드에서 패키지를 설치하고 하나를 통해 사용할 수있는 명령을 모든 노드에 코드를 호출 library(thePackageYouUse)이 -

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

감사 더크 - boot 패키지가 모든 곳에서로드되는 경우 help(clusterApply)에서 여기 예를 들어 참조하십시오. 'clusterExport (ls()) '를하는 것이 위험 할만한 이유가 있습니까? 이것은 패키지에서 함수를 전달하는 데는 도움이되지 않지만 많은 전역 변수에 의존하는 루프 (누군가 아닌 elses!)를 위해 빠르게 병렬화하기 위해 많은 두통을 덜어줍니다. – Michael

+0

scattershot plus kitchen sink approach를 사용한다는 점에서 나쁜 디자인입니다. 직렬 솔루션에서 필요한 것을 설계하고 병렬 처리하십시오. –

+0

충분히 도움이되어 주셔서 감사합니다. – Michael

관련 문제