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
totalsudé, nastavtotalzpět na nulu. - Pokud je
totalvě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
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žívaloparSapply(). - 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
___