CAPÍTULO 5. ESCRITURA DE FUNCIONES
99
Figura 5.3: Jerarquía en los ambientes de las funciones
la diferencia en el valor que tomará la variable
“w”
, al insertar el código de la
función en distintas partes.
La Fig. 5.3 muestra la inserción de la misma función,
MiFunc()
, en dos dis-
tintas partes del código global. La jerarquía de los ambientes es diferente en
cada caso: en la situación marcada como (A), el ambiente global tiene dos hijos
el correspondiente a la función
ff()
y el correspondiente a
MiFunc()
, mientras
que en la situación (B), el ambiente global tiene un solo hijo, el ambiente co-
rrespondiente a la función
ff()
, que a su vez tiene un hijo, el correspondiente
a la función
MiFunc()
. Una nota adicional aquí es que una función puede ser
definida en el interior de otra función y eso es precisamente lo que ilustra la
situación (B) de la figura.
Para resolver el valor de
“w”
, o sea de una variable libre, en cualquier caso,
R busca primero en el ambiente de la misma función, si no encuentra el sím-
bolo ahí, procede a buscar en el ambiente padre, y así lo sigue haciendo con
todos los predecesores hasta encontrar una asociación. Por supuesto que, si en
este proceso, llega al ambiente vacío sin encontrar una asociación posible, el
lenguaje emitirá un mensaje de error.
En el código que sigue se muestra el comportamiento de R las situaciones
mostradas en la Fig. 5.3, y se añade una situación más para ejemplificar lo que
se ha explicado aquí.
w
<-
5
# Primera w
ff
<-
function
() {
w
<-
3
# Segunda w
MiFunc
(
2
,
5
)
}
MiFunc
<-
function
(
x
,
y
) {
r
<-
x
*
y
+
w