foreach를 사용하여 코드를 실행하면 컴퓨터의 프로세서를 최대한 활용할 수 있습니다. 루프의 개별 청크는 각 프로세서로 전송되므로 전체 프로세스가 순서대로 실행되지 않고 병렬로 실행될 수 있습니다. 즉, 각 프로세서는 반복 1-100이 프로세서 1로 이동하고, 반복 101-200이 프로세서 2로 이동하는 등 총 반복 횟수의 유한 한 세트를 가져옵니다. 그런 다음 반복이 완료된 후 각 프로세서의 출력이 컴파일됩니다. 1e4 반복을 병렬로 사용하여 코드를 실행하는 방법은 다음과 같습니다. foreach를 사용할 때 행렬을 만들고 값을 할당하지 않습니다. 대신 내부 루프는 외부 루프에서 행렬로 결합된 결과 행렬의 열을 벡터로 반환합니다. %:% 연산자 사용 방법은 다음과 같습니다: 병렬 백 엔드를 등록한 후에는 foreac` 코드를 병렬로 실행할 준비가 된 것입니다. 예를 들어 사용 가능한 모든 코어에서 10,000개의 부트스트랩 반복을 병렬로 실행하는 데 걸리는 시간을 확인하려면 %do%를 %dopar%로 바꾸는 다음 코드를 실행할 수 있습니다.
기본적으로, 항상 사용 %dopar % 당신은 등록DoSEQ()를 사용할 수 있기 때문에 당신은 정말 순차적으로 foreach를 실행하려는 것입니다. 이터레이터의 개념은 R에 익숙하지만 파이썬과 같은 언어 사용자에게 익숙해야 합니다. 이터레이터 패키지에는 몇 가지 일반적인 시나리오에 대해 이터레이터를 생성하는 여러 특수 함수가 포함되어 있습니다. 예를 들어, irnorm 함수는 각 값이 지정된 임의 정규 분포에서 그려지는 반복기를 만듭니다: foreach 및 %do%/%dopar% 연산자는 루프 및 lapply에 대한 표준의 하이브리드로 볼 수 있는 루핑 구문제공 함수. for 루프와 유사하며 함수가 아닌 식을 평가하지만(lapply에서와 같이) 부작용을 일으키지 않고 값(목록)을 반환하는 것이 목적입니다. 이것은 병렬화를 촉진하지만 루프를 lapply하는 것을 선호하는 사람들에게는 더 자연스럽게 보입니다. foreach 객체는 ex의 평가를 제어하는 데 사용됩니다. foreach()를 사용하여 여러 변수를 동시에 반복할 수도 있습니다. foreach 출력을 유사한 for 루프의 출력과 비교하면 foreach가 각 계산에서 반환되는 값을 포함하는 목록을 반환한다는 명백한 차이점이 있습니다. 반면 A for 루프는 마지막 계산값만 반환하며 사용자 정의 부작용에 의존하여 작업을 수행합니다. 물론, 우리는 실제로 우리가 프로세서를 가지고 병렬로 많은 작업을 실행합니다, 하지만 병렬 백 엔드는 모든 것을 처리.
요점은 %:% 연산자가 실행할 작업 스트림을 쉽게 지정할 수 있게 해주며, foreach에 대한 .combine 인수를 사용하면 결과를 처리하는 방법을 지정할 수 있다는 것입니다.