ComenzarEmpieza gratis

Usa && en lugar de &

Para determinar si ambos dados son iguales, la función move_square() usa sentencias if.

if (is_double[1] & is_double[2] & is_double[3]) {
    current <- 11 # Go To Jail - square 11 == Jail
}

El operador & siempre evalúa ambos argumentos. Es decir, si escribes x & y, R siempre intentará averiguar qué son x e y. Hay casos en los que esto es ineficiente. Por ejemplo, si x es FALSE, entonces x & y siempre será FALSE, sin importar el valor de y. Por tanto, puedes ahorrar un poco de tiempo de procesamiento si no lo calculas. El operador && aprovecha este truco y no se molesta en calcular y si no afecta al resultado final.

En este código, si is_double[1] es FALSE, no necesitamos evaluar is_double[2] ni is_double[3], así que podemos ganar velocidad sustituyendo & por &&.

Ten en cuenta que && solo funciona con valores lógicos individuales, es decir, vectores lógicos de longitud 1 (como los que pasarías a una condición if), mientras que & también funciona con vectores de longitud mayor que 1.

Este ejercicio forma parte del curso

Escribir código R eficiente

Ver curso

Instrucciones del ejercicio

  1. Crea una función improved_move(), similar a move(), pero que use &&.
  2. Con microbenchmark(), compara improved_move() con la versión anterior move().

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# Example data
is_double

# Define the previous solution
move <- function(is_double) {
    if (is_double[1] & is_double[2] & is_double[3]) {
        current <- 11 # Go To Jail
    }
}

# Define the improved solution
improved_move <- function(is_double) {
    if (is_double[1] ___ is_double[2] ___ is_double[3]) {
        current <- 11 # Go To Jail
    }
}

# microbenchmark both solutions
# Very occassionally the improved solution is actually a little slower
# This is just random chance
microbenchmark(___, ___, times = 1e5)
Editar y ejecutar código