Los mensajes no son errores, los warnings tampoco (a veces)
Errores en cadenas de código (team %>%
o |>
)
Los mensajes no son errores, los warnings tampoco (a veces)
Errores en cadenas de código (team %>%
o |>
)
Errores en código anidado (mean(sd(random(n)))
)
Los mensajes no son errores, los warnings tampoco (a veces)
Errores en cadenas de código (team %>%
o |>
)
Errores en código anidado (mean(sd(random(n)))
)
Errores en loops y funciones
Los mensajes no son errores, los warnings tampoco (a veces)
Errores en cadenas de código (team %>%
o |>
)
Errores en código anidado (mean(sd(random(n)))
)
Errores en loops y funciones
Qué hacer cuando todo lo anterior no funciona
Los mensajes no son errores, los warnings tampoco (a veces)
Errores en cadenas de código (team %>%
o |>
)
Errores en código anidado (mean(sd(random(n)))
)
Errores en loops y funciones
Qué hacer cuando todo lo anterior no funciona
Página web: paocorrales.github.io/errores_tutorial/
Estas slides: paocorrales.github.io/errores_tutorial/slides/errores-presentacion.html
Este es un mensaje:
library(data.table)
## ## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':## ## between, first, last
Éste es un warning o advertencia:
x <- c(1, 3)y <- c(1, 2, 3, 4, 5)z <- x == y
## Warning in x == y: longer object length is not a multiple of shorter object## length
Éste es un error:
date[5]
## Error in date[5]: object of type 'closure' is not subsettable
Éste es un error:
date[5]
## Error in date[5]: object of type 'closure' is not subsettable
R y RStudio necesitan usar distintos colores para mensajes, advertencias y errores.
Mientras tanto, rojo/naranja no implica necesariamente error!
Para trabajar localmente 💻: http://tiny.cc/proyecto-debugging
Para trabajar en RStudio Cloud ☁️: https://rstudio.cloud/content/4706056
👉 ¿Dudas? ¿Problemas? Escribilos en el chat y te ayudamos!
pinguinos %>% mutate(dim_pico = largo_pico_mm + alto_pico_mm) %>% group_by(especie, sexo) %>% summarise(pico_promedio = mean(dim_pico)) %>% pivot_wider(names_from = "especie", values_from = c("pico_promdio"))
## `summarise()` has grouped output by 'especie'. You can override using the## `.groups` argument.
## Error in `chr_as_locations()`:## ! Can't subset columns that don't exist.## ✖ Column `pico_promdio` doesn't exist.
¿Devuelve un mensaje de error?
¿El resultado no es el esperado?
Si el error no se resuelve, correr las líneas de código de forma incremental suele ayudar.
y <- runif(15)y[y > max(sample(runif(15) 0))]
## Error: <text>:3:28: unexpected numeric constant## 2: ## 3: y[y > max(sample(runif(15) 0## ^
¿Devuelve un mensaje de error?
¿El resultado no es el esperado?
Acá la estrategía es correr el código de adentro hacía afuera y revisar:
Necetamos algunas herramientas extras para entender el contexto en el que ocurre el error y poder resolverlo.
Encontrar tu bicho es un proceso de confirmación de las muchas cosas que crees que son ciertas, hasta que encuentras una que no lo es.
Norm Matloff
Si lograste abrir el proyecto de RStudio usá la reacción 👍
Si tuviste algún problema levantá la mano ✋
debugonce()
: permite explorar de manera interactiva el entorno creado en una función la próxima vez que ejecutemos esa función. Tendremos acceso a las variables y el "estado" del código en cada momento.debugonce()
: permite explorar de manera interactiva el entorno creado en una función la próxima vez que ejecutemos esa función. Tendremos acceso a las variables y el "estado" del código en cada momento.
debug()
: es similar a la anterior pero se activará cada vez que ejecutemos la función.
debugonce()
: permite explorar de manera interactiva el entorno creado en una función la próxima vez que ejecutemos esa función. Tendremos acceso a las variables y el "estado" del código en cada momento.
debug()
: es similar a la anterior pero se activará cada vez que ejecutemos la función.
options(error = recover)
: en caso de encontrase con un error, devuelve el listado de pasos previos y permite interactuar con el código. (Se revierte con options(error = NULL)
.)
debugonce()
: permite explorar de manera interactiva el entorno creado en una función la próxima vez que ejecutemos esa función. Tendremos acceso a las variables y el "estado" del código en cada momento.
debug()
: es similar a la anterior pero se activará cada vez que ejecutemos la función.
options(error = recover)
: en caso de encontrase con un error, devuelve el listado de pasos previos y permite interactuar con el código. (Se revierte con options(error = NULL)
.)
browser()
: la ejecución del código se detiene cuando encuentra la función browser()
permitiendo trabajar interactivamente en el ambiente generado por la función o código.
Ahora les toca a ustedes!
palindromos.R
disponible en el proyecto.La función palindromo_grande()
busca el palíndromo más grande que se genera al multiplicar 2 números de 3 dígitos. Un palíndromo (o capicúa) es un número que tiene la misma pinta si se lee de derecha a izquierda o de izquierda a derecha. Por ejemplo 24542.
palindromo_grande()
, ¿da el resultado esperado?Usando la función debugonce()
aplicada a palindromo()
:
Objetivo:
Encontrar la ubicación del error. Si entienden cual es el problema, pueden arreglarlo.
Aprovechá para levantarte de la silla y estirar un poco!
05:00
“Show traceback”: Muestra el “paso a paso” del código. Cuando llamamos a varias funciones, muestra en que orden son llamadas. Se lee de abajo para arriba.
traceback()
: es la función que corre por debajo de la mesa cuando usamos "Show traceback". También sirve cuando no estamos dentro de RStudio.
“Show traceback”: Muestra el “paso a paso” del código. Cuando llamamos a varias funciones, muestra en que orden son llamadas. Se lee de abajo para arriba.
traceback()
: es la función que corre por debajo de la mesa cuando usamos "Show traceback". También sirve cuando no estamos dentro de RStudio.
rlang::last_trace()
: También muestra el "paso a paso" del código. El orden es al revés que con traceback()
.
Ahora les toca a ustedes!
cor_negativa.R
disponible en el proyecto.El código devolverá un mensaje de error cuando prueben la función usando el código de prueba que está al final del archivo.
Si corrieron las funciones una a una, no aparecerá el botón que muestra el traceback o la opción para correr el código nuevamente en modo debugging. Tendrán que usar traceback()
y debugonce()
.
Si hicieron source del código autmáticamente veran los botenes "Show Traceback" y "Rerun with Debug"
Objetivo:
Encontrar la ubicación del error. Si entienden cual es el problema, pueden arreglarlo.
Hay errores testarudos que no se resuelven fácilmente. Otras veces el error está en una función de un paquete y no podemos resolverlo.
Siempre está google:
Sys.setenv(LANGUAGE = "en_US")
y correr el código de nuevo para obtener el mensaje en inglés. Pero siempre, siempre está la comunidad de R para pedir ayuda:
Pero "Me da un error" no es suficiente para entender el error y encontrar una solución. Idealmente necesitamos generar un ejemplo que reproduzca el error y podamos compartir.
reprex()
.Para saber más:
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |