CAPÍTULO 4. ESTRUCTURAS DE CONTROL Y MANEJO DE DATOS 68
ciclo para forzar su interrupción. Como un ejemplo, se presenta un ciclo en
que simula lo que podría ser un procedimiento iterativo para encontrar el va-
lor de una variable, cuyo valor converge hacia un cierto valor con cada nueva
iteración. Para no caer en ciclos verdaderamente infinitos, este tipo de procedi-
mientos limitan el número de iteraciones a un valor suficientemente grande, lo
que aquí se hace mediante una instrucción
for
limitada a 1000 repeticiones:
# se usará un generador de números aleatorios,
# la siguiente función asegura su repetibilidad:
set.seed
(
140
)
# el argumento puede ser cualquier número
aprox
<-
0.003
# Valor determinante para la salida del ciclo
Y_ini
<-
2.7
# Supuesto valor inicial de Y
for
(iter
in
1
:
1000
) {
# aseguro no más de 1000 iteraciones
# Procedimiento para calcular la siguiente Y, que
# en este caso simularemos mediante generador aleatorio:
Y
<-
Y_ini
+
0.008
*
rnorm
(
1
)
# La condición de salida:
if
(
abs
(Y
-
Y_ini)
<=
aprox)
break
# Uso del break para salir del ciclo
# Preparamos para la siguiente iteración
Y_ini
<-
Y
}
# Veamos que ha resultado:
paste0
(
"Y_ini: "
, Y_ini,
", Y: "
, Y,
", Num.iter: "
, iter)
## [1] "Y_ini: 2.76443400590741, Y: 2.76582777768031, Num.iter: 8"
En este ejemplo, el objetivo se ha alcanzado en 8 iteraciones. Se ha utiliza-
do la función
abs()
, que entrega el valor absoluto de su argumento, y se ha
utilizado un generador de números aleatorios con distribución normal, imple-
mentado mediante la función
rnorm()
, que se inicializa mediante la función
set.seed()
2
.
Un caso parecido de salida o interrupción de un ciclo es la instrucción
return
. Esta instrucción está asociada con las funciones y su propósito es inte-
rrumpir u obligar la salida de la función en la cuál se invoca, entregando, op-
cionalmente, como resultado de la función un valor si se da como argumento
del
return
. De esta manera, la interrupción de un ciclo es realmente colateral,
pero igualmente efectiva, solamente que la salida de ciclo no es exactamente
afuera
de él, sino
afuera
de la ejecución de la función en la que se ha invocado.
Como un ejemplo, se creará y ejecutará una función: la función generadora de
2
Tal como se ha llamado en el ejemplo, la función rnorm(), entregará valores que tendrán un
valor medio 0, un gran porcentaje de los cuáles (68%) estará entre -1 y 1. Para mayor información
sobre estas funciones, introduzca “?rnorm” y “?set.seed”, en la consola de su intérprete de R. En
el caso del ejemplo, la convergencia está simulada por el hecho de que la media de los números
aleatorios es precisamente 0; entonces el incremento entre un valor y el siguiente tenderá a ser 0.