Використання parSapply()
Раніше ми грали в таку гру:
- Початково:
total = 0. - Кидайте один кубик і додавайте результат до
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())
Це ідеальний кандидат для паралельного виконання!
Щоб зробити функції доступними на кластері, використовуйте функцію 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
___