ComeçarComece de graça

Usando parSapply()

Anteriormente, jogamos o seguinte jogo:

  • Inicialize: total = 0.
  • Jogue um único dado e some ao total.
  • Se total for par, redefina total para zero.
  • Se total for 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

Ver curso

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 em cl.
  • Exporte a função play() para o cluster.
  • Reescreva o sapply() acima como parSapply().
  • 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
___
Editar e executar o código