Avisar de que faltan argumentos en una función de R

Una práctica correcta cuando escribimos funciones es dar información sobre posibles fallos. Estos fallos o alarmas tienen que ser informativos para que podamos saber por qué suceden. Si ejecutas una función y no sabéis por qué está dando problemas, no podremos conocer por qué se produce. Por lo tanto, aquí os voy a mostrar cómo se puede avisar de que faltan argumentos en una función de R.

Quiero leer...

Avisar de que faltan argumentos en una función de R

Para avisar de que faltan argumentos en una función de R tenemos que tener, lógicamente, una función. Así que vamos a crear una función nueva en R. En concreto, vamos a generar una función que sirva para calcular el índice de masa corporal. Este índice nos permite evaluar si el peso de una persona sería el saludable para su estatura.

Generamos la función del índice de masa corporal (IMC)

El índice de masa corporal requiere dos datos:

  • El peso, en kilogramos.
  • La altura, en metros.

La fórmula para calcular el IMC sería el peso dividido por la altura al cuadrado. Pues sabiendo esto, creamos la función imc(). Esta función necesita dos argumentos, que se corresponden con las dos variables que se necesitan. Vamos a llamar a estos argumentos con el mismo nombre: peso y altura. La función quedaría del siguiente modo:

imc <- function(peso, altura) {
  indice <- peso / altura^2
  return(indice)
}

Si ahora queremos calcular el IMC de una persona con 83 kg y 1.83 m de estatura, lo pondríamos así:

imc(peso = 83, altura = 1.83)

O si queremos evitar poner el nombre de los argumentos en la función, podemos omitirlos manteniendo el orden de escritura de los mismos:

imc(83, 1.83)

En cualquiera de las dos opciones anteriores el resultado es el siguiente:

[1] 24.78426

Vemos que el IMC de esa persona es 24.78. Este valor, según las tablas de comparación, se encontraría en los valores saludables.

Falta uno de los argumentos de la función de R

Si por algún motivo no ponemos uno de los argumentos en la función de R, ya que no existen valores predeterminados, nos devuelve un error. Cuando dejamos solo un argumento, por ejemplo el peso, sucede lo siguiente:

imc(83)
Error in imc(83) : 
  el argumento "altura" está ausente, sin valor por omisión

Si ahora ponemos solo la altura, pasa esto otro:

imc(1.83)
Error in imc(1.83) : 
  el argumento "altura" está ausente, sin valor por omisión

En ambos casos, como no especificamos el nombre del argumento, interpreta que automáticamente falta el segundo argumento, por lo que siempre nos devuelve el error de que falta la altura. Si especificamos que el valor introducido es de la altura, nos devuelve que falta el peso.

imc(altura = 1.83)
Error in imc(altura = 1.83) : 
  el argumento "peso" está ausente, sin valor por omisión

Personalizar el mensaje de que faltan argumentos

Cierto es que en el ejemplo anterior se puede deducir qué argumento faltan. En nuestro caso sucede porque es una función muy simple. Pero muchas funciones están compuestas por muchos argumentos y es difícil saber cuáles son los que faltan. De hecho, podemos editar y ver lo complicadas que pueden ser algunas de las funciones más empleadas de R viendo cómo están escritas. En cualquiera de los casos, siempre es interesante y muy importante añadir información extra de que falta algún argumento.

Vamos a personalizar el mensaje de error avisando de que falta el peso en nuestra función:

imc <- function(peso, altura) {
  if(missing(peso)) stop("Por favor, introduce el peso de la persona (en kilogramos).")
  indice <- peso / altura^2
  return(indice)
}

En este caso, hemos introducido una línea nueva en el código con un if. Traduciendo esa línea a nuestro lenguaje estamos diciendo que si falta el peso (if(missing(peso))), que se pare la función dando un error y que nos devuelva el mensaje que queramos (stop("Por favor, introduce el peso de la persona (en kilogramos).")).

Si ahora volvemos a ejecutar la función con solo la altura, nos devuelve ese error personalizado:

imc(altura = 1.83)
Error in imc(altura = 1.83) : Por favor, introduce el peso de la persona (en kilogramos).

De este modo sabemos perfectamente qué falta y añadimos información extra que pueda ser de utilidad para poder solventarlo.

Lógicamente, podemos añadir tantos mensajes como queramos, adaptándolos a los argumentos que tengamos.

imc <- function(peso, altura) {
  if(missing(peso)) stop("Por favor, introduce el peso de la persona (en kilogramos).")
  if(missing(altura)) stop("Por favor, introduce la altura de la persona (en metros).")
  indice <- peso / altura^2
  return(indice)
}

Si a estos avisos de que faltan argumentos le sumamos la obligación de escribir las categorías especificadas en un argumento de una función, tendremos funciones mucho más robustas, informativas y depuradas.

2 comentarios en «Avisar de que faltan argumentos en una función de R»

Deja un comentario