Mensajes de error y advertencia en R
Cuando se utiliza R, especialmente cuando se crean funciones, es posible añadir mensajes simples, mensajes de advertencia o mensajes de error para informar al usuario sobre algo crítico o no crítico con las funciones message
, warning
y stop
. En este tutorial aprenderás a crear estos mensajes y también a listar o suprimir estos mensajes si es posible.
Los mensajes creados con estas funciones aparecerán en la consola de R en naranja.
Mensajes de diagnóstico con message()
La función message
imprime un mensaje personalizado en la consola para informar al usuario sobre algo no crítico. Supón que estás escribiendo una función y quieres informar al usuario para que espere pacientemente hasta que termine, así que añades algunos mensajes que se mostrarán al usuario, como en el ejemplo de abajo:
# Función de muestra
test_fun <- function(x) {
message("La función está procesando...por favor espere...")
# Código principal
Sys.sleep(3)
message("Listo")
}
test_fun()
La función está procesando...por favor espere...
Listo
Si estás construyendo un paquete y quieres un mensaje de inicio puedes usar la función packageStartupMessage
en su lugar.
La función proporciona un argumento llamado appendLF
que por defecto es TRUE
para añadir o no una nueva línea. Si estableces este argumento a FALSE
los mensajes se añadirán en la misma línea.
# Función de muestra
test_fun <- function(x) {
message("La función está procesando...por favor espere...", appendLF = FALSE)
# Código principal
Sys.sleep(3)
message("Listo", appendLF = FALSE)
}
test_fun()
La función está procesando...por favor espere...Listo
Suprimir mensajes con suppressMessages
Si una función muestra mensajes y no quieres que aparezcan en tu consola puedes envolver la función que produce esos mensajes dentro de suppressMessages
para eliminarlos.
# Función de muestra
test_fun <- function(x) {
message("La función está procesando...por favor espere..."
# Código principal
Sys.sleep(3)
message("Listo")
}
suppressMessages(test_fun())
Ten en cuenta que también puedes escribir más líneas de código dentro de suppressMessages
si utilizas llaves, como se muestra en el siguiente ejemplo.
# Función de muestra
test_fun <- function(x) {
message("La función está procesando...por favor espere..."
# Código principal
Sys.sleep(3)
message("Listo")
}
suppressMessages({
# Código
test_fun()
test_fun()
})
Para suprimir los mensajes de inicio de un paquete, utiliza la función suppressPackageStartupMessages
, por ejemplo: suppressPackageStartupMessages(library(dplyr))
Mensajes de advertencia con warning()
La función warning
está diseñada para informar al usuario sobre posibles problemas en el código. En el siguiente ejemplo mostramos un mensaje de advertencia si la entrada no es numérica.
# Función de muestra
test_warning <- function(x) {
if(!is.numeric(x)) {
warning("Este es un mensaje de advertencia porque x no es numérico")
}
return(x)
}
test_warning("15")
15
Warning message:
In test_warning(15) : Este es un mensaje de advertencia porque x no es numérico
Lista con los últimos mensajes de advertencia con warnings
La función warnings
imprime los últimos mensajes de advertencia que aparecieron en consola proporcionados por la variable last.warning
.
test_warning("15")
# Mostrar los últimos warnings
warnings()
Warning message:
In test_warning("15") : Este es un mensaje de advertencia porque x no es numérico
Eliminar mensajes de advertencia con suppressWarnings
Es posible ignorar o suprimir el mensaje de advertencia de una función con la función suppressWarnings
.
# Suprimir las advertencias de una función
suppressWarnings(test_warning("15"))
# Suprimir las advertencias para varias líneas de código
suppressWarnings({
test_warning("15")
test_warning("15")
})
Una alternativa para suprimir el mensaje de advertencia es establecer warn = -1
dentro de options
, como se muestra en el siguiente ejemplo. Recuerda volver a la configuración por defecto (warn = 0
) para mostrar las advertencias de nuevo.
# Ignorar warnings
options(warn = -1)
test_warning("20")
# Back to default
options(warn = 0)
Mensajes de error con stop()
La función stop
detiene la ejecución del código y lanza el mensaje de error que quieras. Esta función está diseñada para detener el código cuando se produce un error crítico e informar de ello al usuario.
# Función de muestra
test_stop <- function(x) {
if(!is.numeric(x)) {
stop("'x' debe ser numérico")
} else {
x <- x * 2
}
return(x)
}
test_stop("12")
Error in test_stop("12") : 'x' debe ser numérico
Obtener el último mensaje de error
La función geterrmessage
proporciona el último mensaje de error disponible como cadena de caracteres.
geterrmessage()
Error in test_stop("12") : 'x' debe ser numérico