Začněte nyníZačněte zdarma

Použití parSapply()

V předchozích lekcích jsme simulovali tuto hru:

  • Inicializace: total = 0.
  • Hoď jednou kostkou a přičti výsledek k total.
  • Pokud je total sudé, nastav total zpět na nulu.
  • Pokud je total větší než 10, hra končí.

Hru lze simulovat pomocí funkce 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
}

Pro 100 simulací hry bychom mohli použít smyčku for nebo funkci sapply():

res <- sapply(1:100, function(i) play())

Toto je ideální případ pro paralelní spuštění!

Aby byly funkce dostupné na clusteru, použij funkci clusterExport(). Ta přijímá cluster a řetězec s názvem funkce.

clusterExport(cl, "some_function")

Toto cvičení je součástí kurzu

Efektivní kód v R

Zobrazit kurz

Pokyny k cvičení

Funkce play() je již definována v tvém pracovním prostoru.

  • Vytvoř cluster pomocí makeCluster() a nastav počet použitých jader na 2. Výsledek ulož do proměnné cl.
  • Exportuj funkci play() do clusteru.
  • Přepiš výše uvedené volání sapply() tak, aby používalo parSapply().
  • Zastav cluster pomocí stopCluster().

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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
___
Upravit a spustit kód