7.4 Funciones

Hasta ahora hemos visto cómo utilizar algunas de las funciones predefinidas en R, pero en ocasiones necesitamos definir nuestras propias funciones. En este apartado veremos cómo hacerlo a través de un par de ejemplos.

El código a continuación define una función de nombre add_two que suma \(2\) al valor que recibe como argumento:

add_two <- function(x) {
  x + 2
}

Para utilizar la función que acaba de definirse escribiríamos

add_two(5)
[1] 7

Veamos un segundo ejemplo. Consideremos la función \[ f(x) = a + be^{cx} \] que depende de tres parámetros \(a\), \(b\) y \(c\). Para evaluar está función en un determinado valor de la variable independendiente \(x\) y valores concretos de los parámetros \(a\), \(b\) y \(c\) definiríamos la siguiente función de R:

myfun <- function(x, a, b, c) {
  a + b * exp(c * x)
}

Si queremos calcular \(f(4)\) siendo \(a = 1\), \(b = 2\) y \(c = 3\) usaríamos

myfun(4, 1, 2, 3)
[1] 325510.6

Como puede verse en los ejemplos anteriores, para definir una función en R:

  • Se indica el nombre de la nombre de la función (como add_two o myfun) y se utiliza el operador de asignación <-, como para definir cualquier otro objeto.

  • Se escribe la palabra clave function y entre paréntesis los nombres de los argumentos.

  • Entre llaves, se escribe el cuerpo de la función, con el código que queremos ejecutar. En dicho código nos referiremos a los argumentos con los nombres que hayamos declarado antes entre paréntesis. El cuerpo de las dos funciones de nuestros ejemplos se limita a una única instrucción, pero en general puede contener un número arbitrario de líneas, donde cada línea puede ser cualquier instrucción de R que puede hacer uso de los argumentos y de otros objetos definidos en instrucciones previas.

  • La última expresión escrita en el cuerpo de la función será la salida de la función, que se imprimirá al llamarla. Nuestros dos ejemplos devuelven un valor numérico, pero una función puede devolver un objeto de cualquier otro tipo como un vector, una lista o una hoja de datos.

La llamada myfun(4, 1, 2, 3) asigna los valores a los argumentos en el orden en que se especificaron en la definición de la función. Como al definir myfun especificamos los argumentos en el orden x, a, b, c, la llamada myfun(4, 1, 2, 3) ejecuta la función con las asignaciones x = 4, a = 1, b = 2 y c = 3.

Si escribimos explícitamente los nombres de los argumentos de una función, podemos indicarlos en cualquier orden. Por ejemplo:

myfun(a = 1, b = 2, c = 3, x = 4)

sería equivalente a myfun(4,1,2,3).