ПочатиПочніть безкоштовно

Використання 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
___
Редагувати та запускати код