Saltar al contenido

Alcance y cierres en R

El alcance de una variable no es nada más que el lugar del código donde está referenciada y visible. Hay dos conceptos básicos de alcance, léxico alcance y es alcance dinámico . En R, hay un concepto de variables libres , que añaden algo de picante al alcance. Los valores de dichas variables se buscan en el entorno en el que se definió la función.

Veamos un ejemplo de variables libres.

Alcance y cierres en R
Alcance y cierres en R
123f <-función(a, b){(a * b)/ z }

R

En esta función, tienes dos argumentos formales, a y b. Tienes otro símbolo, z, en el cuerpo de la función, que es una variable libre. Las reglas de alcance del lenguaje definen cómo se asigna el valor a las variables libres. R utiliza el alcance léxico, que dice que el valor de z se busca en el entorno donde se definió la función.

Nota: El alcance léxico también se conoce como alcance estático.

Con el alcance dinámico, la variable está ligada al valor más reciente asignado a esa variable. El scoping también introduce otro concepto llamado extent . El extent es un intervalo de tiempo específico durante el cual pueden producirse referencias a lo largo de la ejecución. Un dato curioso: El origen del alcance léxico se remonta a 1960, cuando John McCarthy publicó por primera vez su artículo original sobre el lenguaje de programación LISP.

R proporciona algunas rutas de escape para evitar las deficiencias del alcance léxico. El operador <- se llama operador de asignación variable. Dada la expresión a <- 3.14, el valor se asigna a la variable en el entorno actual. Si ya tenía una asignación para la variable antes en el mismo entorno, ésta la sobrescribirá. Las asignaciones de variables sólo se actualizan en el entorno actual, y nunca crean un nuevo ámbito. Cuando R está buscando un valor de una variable dada, comenzará a buscar desde abajo. Esto significa que primero se inspecciona el entorno actual, y luego el entorno que lo rodea. La búsqueda va hasta que se encuentra el valor o se alcanza el entorno vacío.

Vamos a demostrar la búsqueda.

123a &lt;-3.14b =función(x,y){ x * y / a}b(10,11)

R

La salida es la siguiente:

1[1]35.03185

bash

Cuando se llama a la función, sólo se pasan los dos argumentos. R trata de buscar el valor de la variable a y primero mira el alcance de la función. Como no se puede encontrar allí, busca el valor en el ámbito adjunto, donde finalmente lo encuentra. Si no hubiera definido la variable a, le daría el siguiente error: Error en b(10, 11) : el objeto «a» no se encuentra, lo que indica que la búsqueda ha fallado.

Esto nos lleva al concepto de medio ambiente. Los ambientes en R son básicamente mapeos de variables a valores. Cada función tiene un entorno local y una referencia al entorno circundante. Esto ayuda a la exploración y a la búsqueda. Tienes la opción de añadir, eliminar o modificar los mapeos de las variables e incluso puedes cambiar la referencia al entorno que lo rodea.