El arte de programar en R Un leguaje para la estadística - page 106

CAPÍTULO 5. ESCRITURA DE FUNCIONES
103
# CUARTO ambiente: ...y otro nivel mas en la jerarquía:
parent.env
(
parent.env
(
parent.env
(
environment
(duplica))))
## <environment: package:knitr>
## attr(,"name")
## [1] "package:knitr"
## attr(,"path")
## [1] "/home/checo/R/x86_64-pc-linux-gnu-library/3.1/knitr"
El primer ambiente, corresponde al de la función
duplica()
propiamente;
la identificación que se muestra de éste, no nos dice mucho, pero creednos, se
trata del ambiente de la función original. El segundo ambiente, al que se ha
llegado por dos caminos distintos en el código anterior y que es el ambiente
padre del primero, corresponde al de la función
Construye.multiplicador()
;
se trata del ambiente global. A partir del ambiente global, los subsecuentes,
son en orden los de la lista que se se puede obtener con la función
search()
.
Como ejemplo, aquí sólo se han desplegado dos, el tercer y cuarto ambientes
en la búsqueda, y cuya identificación se puede constatar en la lista provista por
search()
, en la sección 5.2.1 en la página 97.
5.4. Recursividad
En matemáticas es común encontrar definiciones de algunos conceptos me-
diante lo que se conoce como relaciones de recurrencia (Hazewinkel [2001]).
Por ejemplo, considérese el factorial de un número, por decir, el 5: 5!
=
5
×
4
×
3
×
2
×
1
=
120. De manera general, el factorial se define mediante una
relación de recurrencia así:
n
!
=
(
1
si,
n
=
0
n
(
n
1
)
! si,
n
>
0
(5.1)
En programación este concepto se implementa mediante una técnica cono-
cida como recursividad (Dijkstra [1960]), la que, en términos sencillos, se puede
ver como la posibilidad de una función de llamarse o invocarse a sí misma. Pa-
ra el caso del factorial, en R, esta función se puede programar de la siguiente
manera:
MiFact
<-
function
(
n
) {
if
(n
==
0
)
return
(
1
)
# salida inmediata
if
(n
>
0
)
return
(n
*
MiFact
(n
-
1
))
return
(
NULL
)
# caso fallido
}
# Ahora se usa la función con 5 y 8
MiFact
(
5
)
1...,96,97,98,99,100,101,102,103,104,105 107,108,109,110,111,112,113,114,115,116,...198
Powered by FlippingBook