Kom igångKom igång gratis

Använda parSapply()

Vi har tidigare simulerat följande spel:

  • Initiering: total = 0.
  • Kasta en tärning och lägg resultatet till total.
  • Om total är jämnt, återställ total till noll.
  • Om total är större än 10 är spelet slut.

Spelet kan simuleras med funktionen 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
}

För att simulera spelet 100 gånger kan vi använda en for-slinga eller sapply():

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

Detta är perfekt att köra parallellt!

För att göra funktioner tillgängliga på ett kluster använder du funktionen clusterExport(). Den tar ett kluster och en sträng med funktionens namn.

clusterExport(cl, "some_function")

Den här övningen är en del av kursen

Effektiv R-kod

Visa kurs

Övningsinstruktioner

Funktionen play() har redan definierats i din arbetsmiljö.

  • Skapa ett kluster med makeCluster() och sätt antalet kärnor till 2. Spara resultatet som cl.
  • Exportera funktionen play() till klustret.
  • Skriv om sapply()-anropet ovan med parSapply().
  • Stoppa klustret med stopCluster().

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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
___
Redigera och kör kod