RevoScaleR은 자동으로 병렬 실행을 수행하지만 오픈 소스 foreach 패키지를 사용하여 병렬 실행을 직접 관리할 수 있습니다. 이 패키지는 R 스크립트에 대한 루핑 구조를 제공합니다. 반복된 작업을 반복해야 하고 작업할 여러 프로세서 또는 노드가 있는 경우 스크립트에서 foreach를 사용하여 for 루프를 병렬로 실행할 수 있습니다. 마이크로소프트에 의해 개발, foreach 기계 학습 서버와 함께 번들로 제공 하지만 또한 포괄적인 R 아카이브 네트워크에서 사용할 수 있는 오픈 소스 패키지, CRAN. 이 게시물에서는 R의 병렬 처리에 대해 이야기합니다. 이 게시물은 내가 사용하는 솔루션에 편향된 것 일 가능성이 높습니다. 예를 들어 mcapply 나 클러스터적용을 사용하지 않습니다. 나는 항상 foreach를 사용하는 것을 선호합니다. 이 게시물에서는 컴퓨터에서 R 코드를 패키지 {foreach}로 병렬화하는 방법에 중점을 둡니다.

plyr는 일반적인 문제 집합에 대한 도구 집합입니다: 빅 데이터 구조를 균질한 조각으로 __split___ 올라가야 하고, __apply___ 함수를 각 조각에 함수한 다음 __combine___ 모든 결과를 다시 함께 만들어야 합니다. 예를 들어 foreach의 중요한 기능은 중첩 연산자 %:%입니다. %do% 및 %dopar% 연산자와 마찬가지로 이진 연산자이지만 두 개의 foreach 개체에서 작동합니다. 또한 본질적으로 피연산자의 특별한 합병인 foreach 객체를 반환합니다. foreach 패키지는 병렬 작업 집합으로 for-loop로 표현될 수 있는 거의 모든 것을 실행할 수 있는 도구 집합입니다. 한 가지 시나리오는 여러 시뮬레이션을 병렬로 실행하는 것입니다. 간단한 예로, 벡터 c(H, T)에서 대체샘플링하여 수행할 수 있는 10000개의 동전 뒤집기 시뮬레이션사례를 생각해 보십시오. 이 시뮬레이션을 10회 순차적으로 실행하려면 %do% 연산자가 있는 foreach 를 사용하십시오: 중첩된 foreach 호출에 대한 자세한 내용은 foreach 패키지의 비네팅 “foreach 루프 중첩”을 참조하십시오. 이것은 루프에 중첩된 것과 매우 비슷합니다. 외부 foreach는 “bvec”의 값을 반복하여 내부 foreach로 전달하며, “bvec”의 각 값에 대해 “avec”의 값을 반복합니다. 따라서 “sim” 함수는 두 경우 모두 동일한 방식으로 호출됩니다. 이 버전에서는 코드가 약간 더 깔끔하며 쉽게 병렬화될 수 있다는 장점이 있습니다.