Funciones en R


Rosa Molina

En esta entrada del blog de R para biólogos revisaremos ampliamente el concepto de funciones. Veremos cómo es su estructura, cuáles son sus componentes y sintaxis. Hablaremos sobre cómo crear nuestras propias funciones, usar las funciones por defecto de R, y las de paqueterías/librerías externas.

Si estás empezando a usar R o RStudio, esta entrada te ayudará a comprender el mundo de las funciones, algo esencial dentro de este lenguaje de programación. Si ya eres algo más experimentado, puede que encuentres algunas cosas que no sabías. Vamos allá.


ADVERTISEMENT



Una función es un conjunto de comandos organizados para realizar una tarea específica.

En R, el uso de las funciones es cotidiano. Definir vectores se hace con la función c(), calcular promedios se hace con la función mean(), etc. Cada tarea que puedas imaginar en R se hace con una función.

Estructura

Toda función tiene cuatro componentes:

  • Nombre: para usar una función hay que llamarla por su nombre.
  • Argumentos: los argumentos le indican a la función sobre quién y cómo realizará su tarea específica.
  • Cuerpo: en el cuerpo se define qué es lo que hace la función.
  • Salida: la salida es el resultado final de la función.

Sintaxis

Cuando defines una función, defines todos sus componentes. Definamos una función que sirva de ejemplo:

sumar2 <- function (arg1, arg2) {
   #Aquí va el cuerpo de la función
   salida <- arg1 + arg2
   return(salida)
   #La función return() sirve para especificar la salida de las funciones
}

La función se define como si fuera cualquier variable, con el operador de asignación: <-. Después viene la palabra "function", que le indica a R que se trata de una función. Lo siguiente son los argumentos, definidos entre paréntesis y separados por comas. Por último, entre corchetes está el cuerpo y la salida de la función, pueden ser una o varias líneas de código.

La función anterior tiene nombre, argumentos, cuerpo y salida. El nombre de la función es sumar2(). Los argumentos se llaman "arg1" y "arg2" y son sumados dentro del cuerpo. La suma se guarda en la variable llamada "salida", que, precisamente será la salida de la función.

De esta forma, si queremos usar nuestra función para sumar dos números, lo haríamos de la siguiente manera:

sumar2(4,6)

Y el resultado será el siguiente:

[1] 10

Definición y llamado de argumentos

Vamos a definir una función que calcule potencias. Tendrá dos argumentos, el primero será el número base, y el segundo el exponente. Lo haremos de la siguiente manera:

potencia <- function (base, exponente) {
   salida <- base^exponente
   return(salida)
}

Ahora, cuando llamemos la función, debemos especificar ambos números, base y exponente. Podemos hacerlo especificando los valores de cada argumento:

#Todos los comandos siguientes darán el mismo resultado
potencia(2, 8)
potencia(base = 2, exponente = 8)
potencia(exponente = 8, base = 2)

La sintaxis para especificar el argumento es el nombre del argumento, el signo '=', y el valor del argumento. No importa qué argumento especifiques primero o después, siempre y cuando lo especifiques con su nombre.

#Si no vas a especificar el argumento, entonces los tienes que escribir en el orden que fueron definidos
potencia(2, 8)
#no es lo mismo que:
potencia(8, 2)

Cabe mencionar que también puedes definir un valor por default a un argumento. Por ejemplo, si queremos que nuestra función "potencia", realice la operación con exponente 2 si sólo se especifica el argumento base, lo haríamos así:

potencia <- function (base, exponente = 2) {
   salida <- base^exponente
   return(salida)
}

potencia(3)

De esta forma, no hay problema si se llama a nuestra función con un sólo argumento, porque por default usará el número 2 como exponente.

Importante
Dentro de una función, ya sea que la hayas definido tú o esté por defecto en R, hay variables en el cuerpo. Un ejemplo es la variable "salida" que definimos en nuestras funciones. Estas variables no están a tu disposición en el espacio de trabajo ("Workspace"). Sólo existen dentro de la función.

Funciones por defecto

Dentro de R, vienen incluidas muchas funciones, pensadas para realizar las tareas más comunes para las que fue diseñado como lenguaje. Hemos visto varias dentro del blog, como class(), typeof(), data.frame(), etc.

Para ver el código fuente, es decir, las líneas de código que se usaron para definir estas funciones, puedes hacer lo siguiente:

  1. Escribir el nombre de la función, ya sea en la ventana de "Source" o "Console".
  2. Verificar que el cursor del mouse está sobre el texto.
  3. Presionar la tecla F2.

Si necesitas ayuda para saber qué hace una función, cuáles son sus argumentos y para qué sirven, puedes revisar la documentación. Para hacerlo haz lo siguiente:

  1. Escribir el nombre de la función, ya sea en la ventana de "Source" o "Console".
  2. Verificar que el cursor del mouse está sobre el texto.
  3. Presionar la tecla F1. La documentación aparecerá en la pestaña de "Help".

O simplemente puedes escribir el operador "?", seguido del nombre de la función que quieres revisar. Así:

?mean

Un último tip: es posible llamar funciones dentro de otras funciones. De hecho, es una práctica muy común. Veamos un ejemplo.

#Vamos a crear un vector con c() pero vamos a calcular la media de ese vector en una misma línea de código
mean(c(1,2,3,4,5,6,7,8,9))

Importante
Si vas a usar esta técnica, recuerda revisar que abras y cierres todos los paréntesis.

Librerías/paquetes

Ya vimos que R tiene muchas funciones en su arsenal. Sin embargo, muchas personas han desarrollado formas más fáciles de hacer tareas, o formas de trabajar con archivos de cierto tipo (como imágenes ráster, vectoriales, árboles filogenéticos, etc.) con sus propias funciones.

He aquí donde entran los llamados "paquetes", "paqueterías", "librerías", etc. Como sea que te refieras a ellos, son conjuntos de funciones, desarrollados por una o un grupo de personas, para realizar tareas relacionadas. Por supuesto, todo siempre curado por los desarrolladores de R.

Cuando instalamos un paquete en R, lo que hacemos es descargar el código fuente de las funciones que incluye.

install.packages()

Y cuando cargamos un paquete en R, lo que hacemos es hacer disponible en el espacio de trabajo ("Workspace") de la sesión actual, las funciones que tenemos descargadas.

library()

Comentarios finales

Esta fue nuestra entrada dedicada a las funciones. Ciertamente hay conceptos y prácticas más avanzadas en cuestión de funciones, pero lo veremos más adelante en el blog.

Ahora es tu turno, en vez de copiar y pegar líneas de código una y otra vez, ¡define tus propias funciones!

Eso es todo, ¡gracias por leer!


Esta publicación fue hecha usando R versión 3.6.3 (2020-02-29).

ADVERTISEMENT



← Publicación más antigua Publicación más reciente →


Acerca del autor


Foto del autor

Rosa Molina

Rosa es nuestra bióloga experta en R. Le gusta la observación de aves y tocar el piano de vez en cuando.




0 comentarios

Dejar un comentario

Por seguridad, los comentarios deben ser aprobados antes de ser publicados