Sử dụng parSapply()
Trước đó chúng ta đã chơi trò sau:
- Khởi tạo:
total = 0. - Tung một con xúc xắc và cộng vào
total. - Nếu
totallà số chẵn, đặt lạitotalvề 0. - Nếu
totallớn hơn 10, trò chơi kết thúc.
Trò chơi có thể được mô phỏng bằng hàm 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
}
Để mô phỏng trò chơi 100 lần, bạn có thể dùng vòng lặp for hoặc sapply():
res <- sapply(1:100, function(i) play())
Đây là bài toán lý tưởng để chạy song song!
Để đưa các hàm lên cluster, bạn dùng hàm clusterExport(). Hàm này nhận một cluster và một chuỗi là tên của hàm.
clusterExport(cl, "some_function")
Bài tập này là một phần của khóa học
Viết mã R hiệu quả
Hướng dẫn bài tập
Hàm play() đã được định nghĩa trong không gian làm việc của bạn.
- Tạo một cluster bằng
makeCluster(); đặt số nhân sử dụng bằng 2. Lưu kết quả vàocl. - Export hàm
play()lên cluster. - Viết lại hàm
sapply()ở trên thànhparSapply(). - Dừng cluster bằng
stopCluster().
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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
___