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älltotaltill 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
Övningsinstruktioner
Funktionen play() har redan definierats i din arbetsmiljö.
- Skapa ett kluster med
makeCluster()och sätt antalet kärnor till 2. Spara resultatet somcl. - Exportera funktionen
play()till klustret. - Skriv om
sapply()-anropet ovan medparSapply(). - 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
___