Luego busca en los espacios de nombres, en la lista de búsqueda.
La lista de búsqueda la podemos consultar utilizando la función search.
El ambiente global siempre es el primero en la lista de búsqueda y el paquete base
siempre es el último en la lista de búsqueda.
El orden de los paquetes en la lista es el orden en el que se hará la búsqueda.
Los usuarios pueden configurar los paquetes que se cargan al iniciar.
Por lo que no podemos suponer que habrá una lista de paquetes disponibles siempre.
Cuando cargamos un paquete con la función library, el espacio de nombres
de este paquete quedará en segundo lugar en la lista de búsqueda.
Y todos los demás paquetes se irán un lugar hacia abajo.
Hay que notar que R tiene un espacio de nombres específico para
funciones y para cualquier cosa que no sea una función.
¿Esto que significa?
Que por ejemplo podemos tener una función que you hemos utilizado llamada C,
que nos puede ayudar a crear vectores.
Y también un objeto llamado C que puede tener un valor.
Como lo que estamos viendo en pantalla.
Recuerdan este ejemplo que está apareciendo en pantalla.
La función Z era una variable libre.
¿Qué pasaría si ejecutáramos ese código?
Si mandamos a llamar a la función1 con los argumentos uno y dos, y.
Como la variable Z no está definida,
nos mandará un error, que nos dice que la Z no se encuentra.
Pero si definimos Z anteriormente, y luego volvemos a hacer una
llamada a la función1, con los argumentos unidos, nos regresará ocho.
Esto significa que el valor de Z dentro de la función es el valor que encuentra
primero, es decir, en el ambiente global, que es donde se definió que Z vale cinco.
Y ese es justamente de lo que trata el alcance léxico, que es que los valores
de las variables se buscan en el ambiente en el que la función fue definida.
Un ambiente no es más que una colección
de parejas de símbolos y valores asociados a esos símbolos.
Cada ambiente tiene un ambiente padre
y es posible que un ambiente tenga múltiples ambientes hijos.
El único ambiente que no tiene padre, es el ambiente vacío.
SI el valor de un símbolo no se encuentra en el ambiente en el
que la función fue definida, se busca en el padre, y así hacia arriba
hasta el llegar al nivel más alto, es decir, generalmente el ambiente global.
O el espacio de nombres de un paquete.
Después de llegar al nivel más alto, se continúa hasta llegar al ambiente vacío.
Si el valor de un símbolo no es encontrado en un ambiente
antes de llegar al ambiente vacío, entonces se va a encontrar con un error,
que es justo lo que pasó con el ejemplo que observamos al principio.
Esto típicamente no tendría mucho sentido,
pero en R, nosotros podemos definir funciones dentro de otras funciones.
En este caso, el ambiente de una función es justamente el cuerpo de otra.
Por ejemplo la función que estamos observando en pantalla en este momento,
llamada elevar.potencia recibe un parámetro n.
Y dentro de ella se define otra función que utiliza ese parámetro para
generarnos una función.
Es decir, que lo que regresa esa función es una función también.
Vamos a ver cómo funciona.
Por ejemplo, si mandamos a llamar la función elevar.potencia
con diferentes parámetros.
Y guardamos en diferentes objetos
el resultado de esas ejecuciones de la función elevar.potencia,
podemos observar que esos objetos que guardan el resultado de esas llamadas.