Funciones

Kenneth Cabrera
18 septiembre, 2019

Funciones I

Las funciones se crean con la instrucción function() y se guardan en R como cualquier objeto. Son de la clase “function”.

f <- function(<argumentos>) {
       ## Instrucciones
     }
  • Las funciones puden ser pasadas como argumentos a otras funciones.
  • Las funciones pueden ser anidadas.
  • La última expresión de una función se toma como el valor que la función retorna (omitiendo el return)

Funciones II

Las funciones tienen argumento con nombre los cuales tienen potencialmente valores por omisión.

  • Los argumentos formales son los que se incluyen en la definción de la función.
  • La función formals muestra una lista de todos los argumentos de una función.
  • No todo llamado a una función en R usa todos los argumentos formales.
  • Los argumentos pueden no estar presentes o tener valores por omisión.

Funciones II

En R los argumentos de las funciones se pueden indicar por su posición o por su nombre.

misdatos <- rnorm(100)
formals(sd)
sd(misdatos)
sd(x = misdatos)
sd(x = misdatos, na.rm = FALSE)
sd(na.rm = FALSE, x = misdatos)
sd(na.rm = FALSE, misdatos)
  • Se recomienda utilizar el nombre de los argumentos y conservar el orden.

Validación de argumentos

f4 <- function(a, b, c, d){
  stopifnot(a >= 0, a <= 1, b > 1, c > 0)
  r1 <- c(qnorm(a), log(b-1), sqrt(c))
  return(r1)
}

f4(2, 2, 0.5)

f4(0.1, 0.5, 0.5)

f4(0.1, 5, -2)

f4(0.1, 0.5, -1)

Recomendaciones I

  • Realice los ejercicios de algoritmos. (Adquira un pensamiento algorítmico).
  • Comente su código.
  • RTFM!. (LEMM o LEPM)
  • Piense antes de escribir. (Piense primero en el que y luego en el como).
  • Diseñe en forma “top-down”, codifique en forma “bottom up”.
  • Divida el problema en pequeñas funciones significativas.

Recomendaciones II

  • Evite escribir la misma rutina dos veces.
  • Use nombres relevantes.
  • Realice una prueba de escritorio o seguimiento. (función por función en forma “bottom up”)
  • No se rinda, quéjese!! (ayuda a listas, compañeros, etc).
  • Evite iteraciones o ciclos explícitos (R es vectorizado).