foreach의 병렬화

    앞에서 foreach( ) 함수에는 %do%를 사용해 실행할 명령의 블록을 지정해야 한다고 설명했다. 만약 foreach( )에서 블록 내 명령을 병렬로 수행하고자 한다면 registerDoParallel( )을 한 뒤 foreach( )에 %do% 대신 %dopar%를 지정하면 된다.

    예를 들어, 다음은 i 값이 1부터 800,000까지 변할 때 이 값을 big_data$value에 더한 다음 그 평균을 매 i마다 계산한 예다.

    > library(doParallel)
    > library(foreach)
    > registerDoParallel(cores=4)
    
    > big_data <- data.frame(
    +   value=runif(NROW(LETTERS) * 2000000),
    +   group=rep(LETTERS, 2000000))
    
    > foreach(i=1:800000) %dopar% {
    +   mean(big_data$value + i)
    + }
    

    이 예에서는 설명을 위해 다소 작위적인 코드를 작성했다. 좀 더 실제적인 적용 사례로는 다양한 파라미터에 따라 모델을 만들어보면서 가장 적절한 파라미터를 찾는 예를 들 수 있다. 예를 들어, 다수의 의사 결정 나무decision tree를 가진 랜덤 포레스트Random Forest 모델을 만들 때 적절한 나무 개수를 설정하기 위해 다양한 나무의 수를 사용해보는 경우[11]를 들 수 있다. 다음은 이를 의사 코드pseudo code로 표현한 것이다.

    > foreach(ntree=c(10, 20, 30, 100, 1000)) %dopar% {
    +   build_model(big_data, ntree=ntree)
    + }
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.