1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Viết mã R hiệu quả

Connected

Bài tập

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")

Hướng dẫn

100 XP

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().