Używanie parSapply()
Wcześniej symulowaliśmy następującą grę:
- Inicjalizacja:
total = 0. - Rzuć jedną kością i dodaj wynik do
total. - Jeśli
totaljest parzyste, zresetujtotaldo zera. - Jeśli
totaljest większe niż 10, gra się kończy.
Grę można symulować za pomocą funkcji 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
}
Aby zasymulować grę 100 razy, można użyć pętli for lub funkcji sapply():
res <- sapply(1:100, function(i) play())
To idealne zadanie do uruchomienia równoległego!
Aby udostępnić funkcje na klastrze, używa się funkcji clusterExport(). Przyjmuje ona klaster oraz ciąg znaków z nazwą funkcji.
clusterExport(cl, "some_function")
To ćwiczenie jest częścią kursu
Wydajny kod w R
Instrukcje do ćwiczenia
Funkcja play() została już zdefiniowana w twoim środowisku pracy.
- Utwórz klaster za pomocą
makeCluster(), ustawiając liczbę używanych rdzeni na 2. Wynik zapisz jakocl. - Wyeksportuj funkcję
play()do klastra. - Przepisz powyższe wywołanie
sapply(), używającparSapply(). - Zatrzymaj klaster za pomocą
stopCluster().
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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
___