Sección 5 Generar nuevas funciones

R es un lenguaje que permite crear nuevas funciones. Una función se define con una asignación de la forma:

nombre <- function(arg1, arg2, ...) {
   expresion
 }

La expresion es una fórmula o grupo de fórmulas (o sentencias) que utilizan los argumentos para calcular uno o varios valores. El resultado de dicha expresión es el valor que proporciona R en su salida y éste puede ser un número, un vector, un gráfico, una lista. Una función devuelve el valor de la última expresión evaluada.

Ejemplos:

funcion_1 <- function(x) { y = x + 4}

(a <- funcion_1(5))
## [1] 9

En el caso siguiente, si se desea guardar el resultado en un objeto sólo se almacenará el rango (último valor impreso en consola).

funcion_2 <- function(muestra) {     #El único argumento es un vector de datos
  media = mean(muestra, na.rm = T)
  varianza = var(muestra, na.rm = T)
  rango = max(muestra, na.rm = T) - min(muestra, na.rm = T)
  print(paste("Media:", round(media, 2)))
  print(paste("Varianza:", round(varianza, 2)))
  print(paste("Rango:", round(rango, 2)))
}

miValor <- funcion_2(rnorm(40,5,16))
## [1] "Media: 8.67"
## [1] "Varianza: 224"
## [1] "Rango: 59.92"
miValor
## [1] "Rango: 59.92"

Para que guarde los tres resultados hay que especificar que se haga una lista o vector.

funcion_3 <- function(muestra) {
  med = mean(muestra, na.rm = T)
  vari = var(muestra, na.rm = T)
  rang = max(muestra, na.rm = T) - min(muestra, na.rm = T)
  # list(media = med, varianza = vari ,rango = rang)
  c("Media" = med,
    "Var" = vari,
    "Rango" = rang)
}

ej <- funcion_3(1:20)
ej
## Media   Var Rango 
##  10.5  35.0  19.0

Los diferentes argumentos de las funciones se separan con ,. Éstos pueden tener un valor por defecto. Para indicarlo, en el momento de definir la nueva función, se determina con el signo = cuál es el valor que se usará si el usuario no lo especifica explícitamente.

funcion_4 <- function(a, b, c = 4, d = FALSE) {
  if (d == FALSE) {
    x1 <- a * b
  } else {
    x1 <- a * b + c
  }
  x1
}

Para utilizar la función, no es necesario explicitar el nombre de cada argumento. R seguirá el orden de la lista de argumentos que se utilizó en la definición de la función. Así, es recomendable que los argumentos sin valores por defecto, se coloquen como últimos argumentos.

funcion_4(a = 2, b = 5)
## [1] 10
funcion_4(2, 5)
## [1] 10
# Especifica valores de 2, 5 y 3 para a, b y c, sin tener que aclarar 
# los nombres de dichos argumentos
funcion_4(2, 5, 3)     
## [1] 10
funcion_4(2, 5, 3, TRUE)    
## [1] 13

En el caso de no asignar un valor a uno de los argumentos y optar por utilizar el valor por defecto, es necesario el uso de “d = “ pues en caso contrario el tercer argumento corresponde a c.

funcion_4(2, 5, d = TRUE) 
## [1] 14

Ejercitación

  1. Funciones

    Genere una función que grafique una variable en función de otra y coloque nombre al eje x que por defecto sea: “mi eje x”