1. 학습
  2. /
  3. 강의
  4. /
  5. 효율적인 R 코드 작성

Connected

연습 문제

parSapply() 사용하기

이전에 다음과 같은 게임을 했어요:

  • 초기화: total = 0.
  • 주사위 하나를 굴린 뒤 total에 더해요.
  • total이 짝수이면 total을 0으로 초기화해요.
  • total이 10보다 크면 게임이 끝나요.

이 게임은 play() 함수로 시뮬레이션할 수 있어요:

play <- function() {
  total <- no_of_rolls <- 0
  while(total < 10) {
    total <- total + sample(1:6, 1)

    # If even. Reset to 0
    if(total %% 2 == 0) total <- 0 
    no_of_rolls <- no_of_rolls + 1
  }
  no_of_rolls
}

게임을 100번 시뮬레이션하려면 for 반복문이나 sapply()를 사용할 수 있어요:

res <- sapply(1:100, function(i) play())

이는 병렬 실행에 아주 적합해요!

클러스터에서 함수를 사용할 수 있게 하려면 clusterExport() 함수를 사용해요. 이 함수는 클러스터와, 내보낼 함수 이름을 문자열로 받습니다.

clusterExport(cl, "some_function")

지침

100 XP

play() 함수가 작업 공간에 정의되어 있어요.

  • makeCluster()로 클러스터를 만들고, 사용할 코어 수를 2로 설정하세요. 결과를 cl에 저장하세요.
  • play() 함수를 클러스터로 내보내세요.
  • 위의 sapply() 함수를 parSapply()로 바꿔 작성하세요.
  • stopCluster()를 사용해 클러스터를 중지하세요.