miércoles, 5 de agosto de 2009

R: Funciones

En este capítulo abordaremos el diseño de funciones en R. El poder crear nuestras propias funciones será fundamental para nuestros estudios futuros, para ello, tenemos a mano el objeto denominado function que constituyen nuevas funciones de R, que se puede utilizar a su vez en expresiones posteriores.

La sintaxis es simple y se asemeja a lenguajes de programación cómo el C:

NombreFuncion <- function (Argumento1,..., ArgumentoN)
{
expresión 1
...
expresión N
}

Los argumentos de las funciones se pueden dar por nombre o posición, por ejemplo, vamos a diseñar una función que nos devuelva la media de dos número.

Parámetros a tener en cuenta a la hora de confeccionar una función:

· Nombre de la función: Media2
· a ≡ Primer número.
· b ≡ Segundo número.

Nuestra función que calcula la media de dos números dados tendrá la siguiente forma en R:

> Media2 <- function(a,b){
+ Resultado <- (a+b)/2
+ Resultado
+ }

Dónde hemos dicho a R que el objeto Media2 es una función que recibirá dos parámetros de nombres a y b respectivamente, y en su cuerpo, se ha definido la expresión a realizar, en este caso, se ha declarado una variable llamada Resultado que contendrá la operación de sumar ambos parámetros y dividirlos por 2, para posteriormente, mostrarlo por pantalla.

Pasamos a probarla simplemente dando valores, por posición, a los argumentos:

> Media2(4,2)
[1] 3

También podemos dar los valores de los argumentos por sus nombres, ésta forma es útil ya que no se tiene por qué mantener el orden de los parámetros definidos:

> Media2(b=7,a=2)
[1] 4.5

Como podemos comprobar, la creación de funciones en R es bastante simple y por ende, una gran herramienta que nos permitirá diseñar funciones a medida para problemas puntuales, usando el potencial de R.

Consideraciones a tener en cuenta al manejar funciones:
  • Podemos crear una función que tenga uno o varios argumentos fijos, pero hay que tener en cuenta que los argumentos con valores fijos o por defecto, deben ser declarados después de los argumentos variables, por ejemplo, un caso erróneo de declaración de argumentos en la función:
> Media2 <- function(a=2,b){
+ (a+b)/2
+ }

R, nos permite definir la función pero nos advertirá de un error si la usamos con el argumento variable sin dar su nombre:

> Media2(1)
Error en Media2(1) : elemento 2 esta vacio;
la parte de la lista de argumentos '+' ha sido evaluada:
(a, b)

Para que no exista error y podamos usar la función definida, debemos especificar el nombre de la variable a pasarle el valor:

> Media2(b=1)
[1] 1.5

Los valores que hemos definido como constantes, se pueden sobrescribir, simplemente debemos especificar el nombre de la variable y darle el valor deseado:

> Media2(a=4,b=1)
[1] 2.5

  • Un parámetro importante que podemos emplear en las funciones es poder pasar argumentos a otra función, ésto se realiza mediante el comando: ...
Por ejemplo, definamos una función que se empleará para pasar parámetros de configuración, a la función plot:

> Dibujar <- function(x, y, label = "Aqueronte", ...){
+ plot(x, y, xlab = label, ...)}

La función Dibujar que hemos declarado tomará los datos del eje X e Y que le demos y los pasará a la función plot con la etiqueta en el eje X que ponga Aqueronte.

> Dibujar(1:5,1:5)

El resultado es el siguiente:


Vemos que hemos conseguido exactamente lo que queríamos.

  • Cuando definimos funciones, una manera práctica, sencilla y rápida de ver que argumentos acepta, se emplea la función args, por ejemplo, para ver el tipo de argumentos a nuestra función:
> args(Dibujar)
function (x, y, label = "Aqueronte", ...)
NULL

Nos informa que tiene tres argumentos de los cuales dos son variables: x e y, y el tercero es una constante.
El hecho de que R nos permita diseñar y crear funciones hace que, el lenguaje gana considerablemente en potencia, comodidad y elegancia.

0 comentarios: