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")
이 연습은 강의의 일부입니다
효율적인 R 코드 작성
연습 안내
play() 함수가 작업 공간에 정의되어 있어요.
makeCluster()로 클러스터를 만들고, 사용할 코어 수를 2로 설정하세요. 결과를cl에 저장하세요.play()함수를 클러스터로 내보내세요.- 위의
sapply()함수를parSapply()로 바꿔 작성하세요. stopCluster()를 사용해 클러스터를 중지하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
library("parallel")
# Create a cluster via makeCluster (2 cores)
cl <- ___
# Export the play() function to the cluster
___
# Re-write sapply as parSapply
res <- sapply(1:100, function(i) play())
# Stop the cluster
___