Usando parSapply()
Anteriormente, jogamos o seguinte jogo:
- Inicialize:
total = 0. - Jogue um único dado e some ao
total. - Se
totalfor par, redefinatotalpara zero. - Se
totalfor maior que 10, o jogo termina.
O jogo pode ser simulado usando a função 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
}
Para simular o jogo 100 vezes, podemos usar um loop for ou sapply():
res <- sapply(1:100, function(i) play())
Isso é perfeito para rodar em paralelo!
Para disponibilizar funções em um cluster, você usa a função clusterExport(). Ela recebe um cluster e uma string com o nome da função.
clusterExport(cl, "some_function")
Este exercício faz parte do curso
Escrevendo código R eficiente
Instruções do exercício
A função play() já foi definida no seu workspace.
- Crie um cluster usando
makeCluster(); defina o número de núcleos como 2. Guarde o resultado emcl. - Exporte a função
play()para o cluster. - Reescreva o
sapply()acima comoparSapply(). - Pare o cluster usando
stopCluster().
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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
___