เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การใช้งาน parSapply()

เราเคยเล่นเกมต่อไปนี้:

  • เริ่มต้น: total = 0
  • ทอยลูกเต๋า 1 ลูก แล้วนำค่าที่ได้บวกเข้ากับ total
  • ถ้า total เป็นเลขคู่ ให้รีเซ็ต total เป็นศูนย์
  • ถ้า 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())

นี่คือโค้ดที่เหมาะมากสำหรับการรันแบบ parallel!

หากต้องการทำให้ฟังก์ชันพร้อมใช้งานบนคลัสเตอร์ ให้ใช้ฟังก์ชัน clusterExport() โดยรับคลัสเตอร์และชื่อฟังก์ชันในรูปแบบ string:

clusterExport(cl, "some_function")

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การเขียน R Code อย่างมีประสิทธิภาพ

ดูคอร์ส

คำแนะนำการฝึกหัด

ฟังก์ชัน play() ถูกกำหนดไว้ใน workspace ของคุณแล้ว

  • สร้างคลัสเตอร์ด้วย makeCluster() โดยกำหนดจำนวนคอร์เป็น 2 แล้วเก็บผลลัพธ์ไว้ในตัวแปร cl
  • Export ฟังก์ชัน 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
___
แก้ไขและรันโค้ด