Mensajes de error y advertencia en R

Introducción a R Conceptos básicos de R
Mensajes de diagnóstico 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