Zacznij terazZacznij za darmo

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 total jest parzyste, zresetuj total do zera.
  • Jeśli total jest 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

Zobacz kurs

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 jako cl.
  • Wyeksportuj funkcję play() do klastra.
  • Przepisz powyższe wywołanie sapply(), używając parSapply().
  • 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
___
Edytuj i uruchom kod