4.4 Alcance de la función

Es importante mencionar que las variables que son definidas dentro de la función no son accesibles fuera de la función. Es decir, las funciones en R tienen un ambiente local.

Por ejemplo, al correr la siguiente función e intentar imprimir el objeto x regresa un error.

xs_fun <- function(a){
  x <- 2
  a*x
}
xs_fun(2)
## [1] 4
# print(x)

La función crea un ambiente nuevo dentro de la misma, en caso de no encontrar el valor de la variable en el ambiente local, sube un nivel.

Este nuevo nivel puede ser el ambiente global. Por ejemplo:

y <- 10
ys_fun <- function(a){
  a*y
}
ys_fun(2)
## [1] 20

Si la función está contenida en otra función, primero buscará en el ambiente local, después en el ambiente local de la función superior y luego en el ambiente global.

Por ejemplo:

y <- 10
mas_uno_fun <- function(a){
  c <- 1
  y <- 1
  ys_add_fun <- function(a){
    a*y + c
  }
  ys_add_fun(a)
}

Si llamamos la función con un valor a = 2 al igual que en el ejemplo anterior, ¿por qué da el siguiente resultado y no 21 o 20?

mas_uno_fun(a = 2)
## [1] 3