LoslegenKostenlos starten

parSapply() verwenden

Zuvor haben wir folgendes Spiel gespielt:

  • Initialisierung: total = 0.
  • Würfle mit einem einzelnen Würfel und addiere das Ergebnis zu total.
  • Wenn total gerade ist, setze total auf null zurück.
  • Wenn total größer als 10 ist, endet das Spiel.

Das Spiel kann mit der Funktion play() simuliert werden:

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
}

Um das Spiel 100 Mal zu simulieren, können wir eine for-Schleife oder sapply() verwenden:

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

Das eignet sich perfekt für paralleles Ausführen!

Um Funktionen auf einem Cluster verfügbar zu machen, verwendest du die Funktion clusterExport(). Diese nimmt einen Cluster und einen String mit dem Namen der Funktion entgegen.

clusterExport(cl, "some_function")

Diese Übung ist Teil des Kurses

<Kurs>Effizient R-Code schreiben</Kurs>
Kurs ansehen

Übungsanweisungen

Die Funktion play() ist in deinem Workspace definiert.

  • Erstelle einen Cluster mit makeCluster() und setze die Anzahl der Kerne auf 2. Speichere das Ergebnis in cl.
  • Exportiere die Funktion play() in den Cluster.
  • Schreibe die obige sapply()-Funktion als parSapply() um.
  • Beende den Cluster mit stopCluster().

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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
___
Code bearbeiten und ausführen