2013-09-03 1 views
5

크로스 플랫폼이되고 싶은 R 용 패키지를 빌드 중입니다. 리눅스에서 개발 중이며, parallel 패키지에서 mclapply 함수를 사용합니다. 이 패키지는 Windows (doParallel을 사용)에서 지원되지 않습니다. 나는 parallel 패키지가 단순함과 속도면에서 정말 마음에 들지만, 이것이 분리 된 OS를위한 두 가지 다른 버전의 패키지를 사용할 수있는 이유인지는 모르겠다. 그것이 허용되는 경우에도 언급 할 수 있습니다.병렬 또는 doParallel을 사용하여 여러 OS에 CRAN 패키지로 사용하는 사용자 정의 패키지

생각하십니까? '

mclapply(ldata, function(x), mc.cores=cores) 

doParallel의 상당 수'지금 내가 관한하고 또한

parallel

cl <- makeCluster(cores) 
parLapply(cl, ldata, function(x)) 

것이 맞습니까?

+1

이것이'cross' 플랫폼이라고 생각되면 왜'parallel' 패키지의'parLapply'도 사용하지 않겠습니까 (아니면 제 패키지 중 하나에서 사용하고 있기를 바랍니다). 'if() {else {}'를'Sys.info() [ "sysname"]'와 함께 사용하여 올바른 설정을 사용할 수도 있습니다. –

+0

@Tyler Rinker, parLapply가 새로운 스크립트마다 .Rprofile로드를 표시합니까? 그렇다면 포크가 아니기 때문에 좋다고 생각합니다. – PascalVKooten

+0

'parallel' **은 윈도우에서 ** 지원되며,'mclapply'가 사용될 수 있습니다. 그것은 단순한'lapply'처럼 직렬 평가로 되돌아갑니다. –

답변

9

먼저 이 실제로 Windows에서 병렬로 실행되지 않지만 이 parallel 패키지에 있습니다. parLapply은 지원되는 모든 플랫폼에서 병렬로 실행되지만 항상 mclapply만큼 효율적이지는 않습니다. doParallel 패키지는 foreach 패키지와 함께 사용되며 parallel 패키지의 어댑터 역할을합니다. 이 윈도우에서 모든 곳에서 사용 parLapply

  • 작동하고 다른 곳 mclapply
  • 이후

    • 그냥 parLapply를 사용

      Windows 및 비 Windows 모두에서 작동하는 패키지를 작성하려면 합리적인 다양한 옵션을 가지고 foreach

  • 사용 패키지는 비 Windows 플랫폼에서 mclapply을 사용하므로 편리합니다. 예를 들어 :

    library(doParallel) 
    registerDoParallel() 
    foreach(i=1:10, .options.snow=list(preschedule=TRUE)) %dopar% { 
        Sys.sleep(2) 
    } 
    

    이 리눅스와 맥 OS X에 mclapply를 사용하지만 자동으로 Windows의 장면 뒤에 PSOCK 클러스터 객체를 생성합니다. preschedule=TRUE (doParallel 1.0.3에 추가됨)을 사용하면 parLapply과 같이 ~ 사전 예약 내부적으로 clusterApply 작업이 사용됩니다.

    명시 적으로 클러스터 개체를 만들고 등록한 경우 플랫폼에 관계없이 mclapply이 아니며이 사용됩니다. 잘 작동하지만 효율적이지 않을 수 있습니다. mclapply을 사용하려면 숫자 인수 또는 인수가 전혀없는 registerDoParallel을 호출해야합니다.

    플랫폼에 따라 mclapply 또는 parLapply 중 하나를 사용하는 방법에 대한 예제는 boot 패키지의 소스 코드를 참조하십시오.

  • 관련 문제