Bắt đầu ngayBắt đầu miễn phí

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 total là số chẵn, đặt lại total về 0.
  • Nếu total lớ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ả

Xem khóa học

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ào cl.
  • Export hàm play() lên cluster.
  • Viết lại hàm sapply() ở trên thành parSapply().
  • 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
___
Chỉnh sửa và Chạy Mã