Saltar al contenido principal

# 8.2: Bucles

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

La descripción que di antes de cómo funciona un guión fue un poquito de mentira. Específicamente, no es necesariamente el caso de que R comience en la parte superior del archivo y pase directo hasta el final del archivo. Para todos los scripts que hemos visto hasta ahora eso es exactamente lo que sucede, y a menos que insertes algunos comandos para alterar explícitamente cómo se ejecuta el script, eso es lo que siempre sucederá. Sin embargo, en realidad tienes bastante flexibilidad a este respecto. Dependiendo de cómo escriba el script, puede hacer que R repita varios comandos, u omita diferentes comandos, y así sucesivamente. Este tema se conoce como control de flujo, y el primer concepto a discutir al respecto es la idea de un bucle. La idea básica es muy simple: un bucle es un bloque de código (es decir, una secuencia de comandos) que R ejecutará una y otra vez hasta que se cumpla algún criterio de terminación. Looping es una idea muy poderosa. Hay tres formas diferentes de construir un bucle en R, basado en las funciones while, for y repeat. Sólo voy a discutir los dos primeros en este libro.

## bucle while

Un bucle while es algo sencillo. El formato básico del bucle se ve así:

 while ( CONDITION ) {
STATEMENT1
STATEMENT2
ETC
}

El código correspondiente a CONDITION necesita producir un valor lógico, ya sea VERDADERO o FALSO. Siempre que R encuentre una sentencia while, comprueba si la CONDICIÓN es VERDADERA. Si es así, entonces R pasa a ejecutar todos los comandos dentro de los corchetes, procediendo de arriba a abajo como de costumbre. No obstante, cuando llega al fondo de esas declaraciones, vuelve a subir a la declaración while. Entonces, como el autómata sin sentido que es, comprueba para ver si la CONDICIÓN es VERDADERA. Si lo es, entonces R pasa a ejecutar todo... bueno, se entiende la idea. Esto continúa sin cesar hasta que en algún momento la CONDICIÓN resulta ser FALSA. Una vez que eso sucede, R salta al fondo del bucle (es decir, al carácter}), y luego continúa con los comandos que aparecen a continuación en el script.

Para empezar, mantengamos las cosas simples y utilicemos un bucle while para calcular el múltiplo más pequeño de 17 que sea mayor o igual a 1000. Este es un ejemplo muy tonto ya que en realidad puedes calcularlo usando simples operaciones aritméticas, pero el punto aquí no es hacer algo novedoso. El punto es mostrar cómo escribir un bucle while. Aquí está el guión:

## --- whileexample.R
x <- 0
while ( x < 1000 ) {
x <- x + 17
}
print( x )

Cuando ejecutamos este script, R comienza en la parte superior y crea una nueva variable llamada x y le asigna un valor de 0. Luego se mueve hacia abajo al bucle, y “nota” que la condición aquí es x < 1000. Dado que el valor actual de x es cero, la condición es verdadera, por lo que ingresa al cuerpo del bucle (dentro de las llaves). Aquí sólo hay un comando 135 que instruye a R para aumentar el valor de x en 17. A continuación, R vuelve a la parte superior del bucle y vuelve a verificar la condición. El valor de x ahora es 17, pero eso sigue siendo inferior a 1000, por lo que el bucle continúa. Este ciclo continuará por un total de 59 iteraciones, hasta que finalmente x alcance un valor de 1003 (es decir, 59×17=1003). En este punto, el bucle se detiene, y R finalmente llega a la línea 5 del guión, imprime el valor de x en pantalla y luego se detiene. Vamos a ver:

source( "./rbook-master/scripts/whileexample.R" )
## [1] 1003

## para bucle

El bucle for también es bastante simple, aunque no tan simple como el bucle while. El formato básico de este bucle va así:

 for ( VAR in VECTOR ) {
STATEMENT1
STATEMENT2
ETC
}

En un bucle for, R ejecuta un número fijo de iteraciones. Tenemos un VECTOR que tiene varios elementos, cada uno correspondiente a un posible valor de la variable VAR. En la primera iteración del bucle, VAR recibe un valor correspondiente al primer elemento de VECTOR; en la segunda iteración del bucle VAR obtiene un valor correspondiente al segundo valor en VECTOR; y así sucesivamente. Una vez agotados todos los valores en VECTOR, el bucle termina y el flujo del programa continúa por el script.

Una vez más, usemos algunos ejemplos muy simples. En primer lugar, aquí hay un programa que simplemente imprime la palabra “hola” tres veces y luego se detiene:

## --- forexample.R
for ( i in 1:3 ) {
print( "hello" )
}

Este es el ejemplo más simple de un bucle for. El vector de valores posibles para la variable i solo corresponde a los números del 1 al 3. No sólo eso, el cuerpo del bucle en realidad no depende de i en absoluto. No es sorprendente, esto es lo que sucede cuando lo ejecutamos:

source( "./rbook-master/scripts/forexample.R" )
## [1] "hello"
## [1] "hello"
## [1] "hello"

Sin embargo, no hay nada que te impida usar algo no numérico como vector de valores posibles, como lo ilustra el siguiente ejemplo. En esta ocasión, usaremos un vector de caracteres para controlar nuestro bucle, que en este caso será un vector de palabras. Y lo que haremos en el bucle es obtener R para convertir la palabra a letras mayúsculas, calcular la longitud de la palabra e imprimirla. Aquí está el guión:

## --- forexample2.R

#the words_
words <- c("it","was","the","dirty","end","of","winter")

#loop over the words_
for ( w in words ) {

w.length <- nchar( w )     # calculate the number of letters_
W <- toupper( w )          # convert the word to upper case letters_
msg <- paste( W, "has", w.length, "letters" )   # a message to print_
print( msg )               # print it_

}

Y aquí está la salida:

source( "./rbook-master/scripts/forexample2.R" )

## [1] "IT has 2 letters"
## [1] "WAS has 3 letters"
## [1] "THE has 3 letters"
## [1] "DIRTY has 5 letters"
## [1] "END has 3 letters"
## [1] "OF has 2 letters"
## [1] "WINTER has 6 letters"

De nuevo, bastante sencillo espero.

## ejemplo más realista de un bucle

Para darte una idea de cómo puedes usar un bucle en una situación más compleja, escribamos un guión sencillo para simular la progresión de una hipoteca. Supongamos que tenemos una linda pareja joven que pide prestados 300000 dólares al banco, a una tasa de interés anual del 5%. La hipoteca es un préstamo a 30 años, por lo que necesitan pagarlo en un total de 360 meses. Nuestra feliz pareja decide fijar el pago mensual de su hipoteca en 1600 dólares mensuales. ¿Pagarán el préstamo a tiempo o no? Sólo el tiempo lo dirá. 136 O, alternativamente, podríamos simular todo el proceso y conseguir que R nos lo diga. El guión para ejecutar esto es un poco más complicado.

## --- mortgage.R

# set up
month <- 0        # count the number of months
balance <- 300000 # initial mortgage balance
payments <- 1600  # monthly payments
interest <- 0.05  # 5% interest rate per year
total.paid <- 0   # track what you've paid the bank

# convert annual interest to a monthly multiplier
monthly.multiplier <- (1+interest) ^ (1/12)

# keep looping until the loan is paid off...
while ( balance > 0 ) {

# do the calculations for this month
month <- month + 1  # one more month
balance <- balance * monthly.multiplier  # add the interest
balance <- balance - payments  # make the payments
total.paid <- total.paid + payments # track the total paid

# print the results on screen
cat( "month", month, ": balance", round(balance), "\n")

} # end of loop

# print the total payments at the end
cat("total payments made", total.paid, "\n" )

Para explicar lo que está pasando, repasémoslo cuidadosamente. En el primer bloque de código (bajo #set arriba) todo lo que estamos haciendo es especificar todas las variables que definen el problema. El préstamo inicia con un saldo de 300,000 dólares adeudados al banco en el mes cero, y en ese momento el dinero total.pagado no es nada. La pareja está realizando pagos mensuales de 1600 dólares, a una tasa de interés anual del 5%. A continuación, convertimos el interés porcentual anual en un multiplicador mensual. Es decir, el número que se tiene que multiplicar el saldo actual por cada mes para producir una tasa de interés anual del 5%. Una tasa de interés anual del 5% implica que, de no realizarse ningún pago a lo largo de 12 meses el saldo terminaría siendo 1.05 veces lo que era originalmente, por lo que el multiplicador anual es 1.05. Para calcular el multiplicador mensual, necesitamos calcular la raíz 12 de 1.05 (es decir, subir 1.05 a la potencia de 1/12). Almacenamos este valor en como la variable monthly.multiplicador, que a medida que sucede corresponde a un valor de aproximadamente 1.004. Todo lo cual es una forma bastante larga de decir que la tasa de interés anual del 5% corresponde a una tasa de interés mensual de alrededor del 0.4%.

De todas formas... todo eso es realmente solo preparar el escenario. No es la parte interesante del guión. La parte interesante (tal como es) es el bucle. La declaración while on le dice a R que necesita seguir en bucle hasta que el saldo llegue a cero (o menos, ya que podría ser que el pago final de 1600 dólares empuja el saldo por debajo de cero). Entonces, dentro del cuerpo del bucle, tenemos dos bloques de código diferentes. En el primer bit, hacemos todo el crujido de números. En primer lugar aumentamos el valor mes en 1. A continuación, el banco cobra los intereses, por lo que el saldo sube. Entonces, la pareja realiza su pago mensual y el saldo baja. Por último, hacemos un seguimiento de la cantidad total de dinero que la pareja ha pagado hasta el momento, al sumar los pagos a la cuenta corriente. Después de haber hecho todo este crujido de números, le decimos a R que emita a la pareja un estado de cuenta mensual muy conciso, lo que solo indica cuántos meses llevan pagando el préstamo y cuánto dinero aún le deben al banco. Lo cual es bastante grosero de nuestra parte realmente. Me he apegado a esta pareja y realmente siento que se merecen algo mejor que eso. Pero, eso son los bancos para ti.

En cualquier caso, lo clave aquí es la tensión entre el incremento en el equilibrio y la disminución. Siempre y cuando la disminución sea mayor, entonces el saldo eventualmente caerá a cero y el bucle eventualmente terminará. Si no, ¡el bucle continuará para siempre! Esto en realidad es muy mala programación de mi parte: realmente debería haber incluido algo para obligar a R a detenerse si esto dura demasiado tiempo. Sin embargo, todavía no te he mostrado cómo evaluar las declaraciones “if”, así que solo tendremos que esperar que el autor del libro haya amañado el ejemplo para que el código realmente se ejecute. Hm. Me pregunto cuáles son las probabilidades de eso? De todos modos, asumiendo que el bucle finalmente termina, hay una última línea de código que imprime la cantidad total de dinero que la pareja entregó al banco durante la vigencia del préstamo.

Ahora que ya he explicado todo en el guión con tedioso detalle, vamos a ejecutarlo y ver qué pasa:

source( "./rbook-master/scripts/mortgage.R" )
## month 1 : balance 299622
## month 2 : balance 299243
## month 3 : balance 298862
## month 4 : balance 298480
## month 5 : balance 298096
## month 6 : balance 297710
## month 7 : balance 297323
## month 8 : balance 296934
## month 9 : balance 296544
## month 10 : balance 296152
## month 11 : balance 295759
## month 12 : balance 295364
## month 13 : balance 294967
## month 14 : balance 294569
## month 15 : balance 294169
## month 16 : balance 293768
## month 17 : balance 293364
## month 18 : balance 292960
## month 19 : balance 292553
## month 20 : balance 292145
## month 21 : balance 291735
## month 22 : balance 291324
## month 23 : balance 290911
## month 24 : balance 290496
## month 25 : balance 290079
## month 26 : balance 289661
## month 27 : balance 289241
## month 28 : balance 288820
## month 29 : balance 288396
## month 30 : balance 287971
## month 31 : balance 287545
## month 32 : balance 287116
## month 33 : balance 286686
## month 34 : balance 286254
## month 35 : balance 285820
## month 36 : balance 285385
## month 37 : balance 284947
## month 38 : balance 284508
## month 39 : balance 284067
## month 40 : balance 283625
## month 41 : balance 283180
## month 42 : balance 282734
## month 43 : balance 282286
## month 44 : balance 281836
## month 45 : balance 281384
## month 46 : balance 280930
## month 47 : balance 280475
## month 48 : balance 280018
## month 49 : balance 279559
## month 50 : balance 279098
## month 51 : balance 278635
## month 52 : balance 278170
## month 53 : balance 277703
## month 54 : balance 277234
## month 55 : balance 276764
## month 56 : balance 276292
## month 57 : balance 275817
## month 58 : balance 275341
## month 59 : balance 274863
## month 60 : balance 274382
## month 61 : balance 273900
## month 62 : balance 273416
## month 63 : balance 272930
## month 64 : balance 272442
## month 65 : balance 271952
## month 66 : balance 271460
## month 67 : balance 270966
## month 68 : balance 270470
## month 69 : balance 269972
## month 70 : balance 269472
## month 71 : balance 268970
## month 72 : balance 268465
## month 73 : balance 267959
## month 74 : balance 267451
## month 75 : balance 266941
## month 76 : balance 266428
## month 77 : balance 265914
## month 78 : balance 265397
## month 79 : balance 264878
## month 80 : balance 264357
## month 81 : balance 263834
## month 82 : balance 263309
## month 83 : balance 262782
## month 84 : balance 262253
## month 85 : balance 261721
## month 86 : balance 261187
## month 87 : balance 260651
## month 88 : balance 260113
## month 89 : balance 259573
## month 90 : balance 259031
## month 91 : balance 258486
## month 92 : balance 257939
## month 93 : balance 257390
## month 94 : balance 256839
## month 95 : balance 256285
## month 96 : balance 255729
## month 97 : balance 255171
## month 98 : balance 254611
## month 99 : balance 254048
## month 100 : balance 253483
## month 101 : balance 252916
## month 102 : balance 252346
## month 103 : balance 251774
## month 104 : balance 251200
## month 105 : balance 250623
## month 106 : balance 250044
## month 107 : balance 249463
## month 108 : balance 248879
## month 109 : balance 248293
## month 110 : balance 247705
## month 111 : balance 247114
## month 112 : balance 246521
## month 113 : balance 245925
## month 114 : balance 245327
## month 115 : balance 244727
## month 116 : balance 244124
## month 117 : balance 243518
## month 118 : balance 242911
## month 119 : balance 242300
## month 120 : balance 241687
## month 121 : balance 241072
## month 122 : balance 240454
## month 123 : balance 239834
## month 124 : balance 239211
## month 125 : balance 238585
## month 126 : balance 237958
## month 127 : balance 237327
## month 128 : balance 236694
## month 129 : balance 236058
## month 130 : balance 235420
## month 131 : balance 234779
## month 132 : balance 234136
## month 133 : balance 233489
## month 134 : balance 232841
## month 135 : balance 232189
## month 136 : balance 231535
## month 137 : balance 230879
## month 138 : balance 230219
## month 139 : balance 229557
## month 140 : balance 228892
## month 141 : balance 228225
## month 142 : balance 227555
## month 143 : balance 226882
## month 144 : balance 226206
## month 145 : balance 225528
## month 146 : balance 224847
## month 147 : balance 224163
## month 148 : balance 223476
## month 149 : balance 222786
## month 150 : balance 222094
## month 151 : balance 221399
## month 152 : balance 220701
## month 153 : balance 220000
## month 154 : balance 219296
## month 155 : balance 218590
## month 156 : balance 217880
## month 157 : balance 217168
## month 158 : balance 216453
## month 159 : balance 215735
## month 160 : balance 215014
## month 161 : balance 214290
## month 162 : balance 213563
## month 163 : balance 212833
## month 164 : balance 212100
## month 165 : balance 211364
## month 166 : balance 210625
## month 167 : balance 209883
## month 168 : balance 209138
## month 169 : balance 208390
## month 170 : balance 207639
## month 171 : balance 206885
## month 172 : balance 206128
## month 173 : balance 205368
## month 174 : balance 204605
## month 175 : balance 203838
## month 176 : balance 203069
## month 177 : balance 202296
## month 178 : balance 201520
## month 179 : balance 200741
## month 180 : balance 199959
## month 181 : balance 199174
## month 182 : balance 198385
## month 183 : balance 197593
## month 184 : balance 196798
## month 185 : balance 196000
## month 186 : balance 195199
## month 187 : balance 194394
## month 188 : balance 193586
## month 189 : balance 192775
## month 190 : balance 191960
## month 191 : balance 191142
## month 192 : balance 190321
## month 193 : balance 189496
## month 194 : balance 188668
## month 195 : balance 187837
## month 196 : balance 187002
## month 197 : balance 186164
## month 198 : balance 185323
## month 199 : balance 184478
## month 200 : balance 183629
## month 201 : balance 182777
## month 202 : balance 181922
## month 203 : balance 181063
## month 204 : balance 180201
## month 205 : balance 179335
## month 206 : balance 178466
## month 207 : balance 177593
## month 208 : balance 176716
## month 209 : balance 175836
## month 210 : balance 174953
## month 211 : balance 174065
## month 212 : balance 173175
## month 213 : balance 172280
## month 214 : balance 171382
## month 215 : balance 170480
## month 216 : balance 169575
## month 217 : balance 168666
## month 218 : balance 167753
## month 219 : balance 166836
## month 220 : balance 165916
## month 221 : balance 164992
## month 222 : balance 164064
## month 223 : balance 163133
## month 224 : balance 162197
## month 225 : balance 161258
## month 226 : balance 160315
## month 227 : balance 159368
## month 228 : balance 158417
## month 229 : balance 157463
## month 230 : balance 156504
## month 231 : balance 155542
## month 232 : balance 154576
## month 233 : balance 153605
## month 234 : balance 152631
## month 235 : balance 151653
## month 236 : balance 150671
## month 237 : balance 149685
## month 238 : balance 148695
## month 239 : balance 147700
## month 240 : balance 146702
## month 241 : balance 145700
## month 242 : balance 144693
## month 243 : balance 143683
## month 244 : balance 142668
## month 245 : balance 141650
## month 246 : balance 140627
## month 247 : balance 139600
## month 248 : balance 138568
## month 249 : balance 137533
## month 250 : balance 136493
## month 251 : balance 135449
## month 252 : balance 134401
## month 253 : balance 133349
## month 254 : balance 132292
## month 255 : balance 131231
## month 256 : balance 130166
## month 257 : balance 129096
## month 258 : balance 128022
## month 259 : balance 126943
## month 260 : balance 125861
## month 261 : balance 124773
## month 262 : balance 123682
## month 263 : balance 122586
## month 264 : balance 121485
## month 265 : balance 120380
## month 266 : balance 119270
## month 267 : balance 118156
## month 268 : balance 117038
## month 269 : balance 115915
## month 270 : balance 114787
## month 271 : balance 113654
## month 272 : balance 112518
## month 273 : balance 111376
## month 274 : balance 110230
## month 275 : balance 109079
## month 276 : balance 107923
## month 277 : balance 106763
## month 278 : balance 105598
## month 279 : balance 104428
## month 280 : balance 103254
## month 281 : balance 102074
## month 282 : balance 100890
## month 283 : balance 99701
## month 284 : balance 98507
## month 285 : balance 97309
## month 286 : balance 96105
## month 287 : balance 94897
## month 288 : balance 93683
## month 289 : balance 92465
## month 290 : balance 91242
## month 291 : balance 90013
## month 292 : balance 88780
## month 293 : balance 87542
## month 294 : balance 86298
## month 295 : balance 85050
## month 296 : balance 83797
## month 297 : balance 82538
## month 298 : balance 81274
## month 299 : balance 80005
## month 300 : balance 78731
## month 301 : balance 77452
## month 302 : balance 76168
## month 303 : balance 74878
## month 304 : balance 73583
## month 305 : balance 72283
## month 306 : balance 70977
## month 307 : balance 69666
## month 308 : balance 68350
## month 309 : balance 67029
## month 310 : balance 65702
## month 311 : balance 64369
## month 312 : balance 63032
## month 313 : balance 61688
## month 314 : balance 60340
## month 315 : balance 58986
## month 316 : balance 57626
## month 317 : balance 56261
## month 318 : balance 54890
## month 319 : balance 53514
## month 320 : balance 52132
## month 321 : balance 50744
## month 322 : balance 49351
## month 323 : balance 47952
## month 324 : balance 46547
## month 325 : balance 45137
## month 326 : balance 43721
## month 327 : balance 42299
## month 328 : balance 40871
## month 329 : balance 39438
## month 330 : balance 37998
## month 331 : balance 36553
## month 332 : balance 35102
## month 333 : balance 33645
## month 334 : balance 32182
## month 335 : balance 30713
## month 336 : balance 29238
## month 337 : balance 27758
## month 338 : balance 26271
## month 339 : balance 24778
## month 340 : balance 23279
## month 341 : balance 21773
## month 342 : balance 20262
## month 343 : balance 18745
## month 344 : balance 17221
## month 345 : balance 15691
## month 346 : balance 14155
## month 347 : balance 12613
## month 348 : balance 11064
## month 349 : balance 9509
## month 350 : balance 7948
## month 351 : balance 6380
## month 352 : balance 4806
## month 353 : balance 3226
## month 354 : balance 1639
## month 355 : balance 46
## month 356 : balance -1554
## total payments made 569600

Así que nuestra simpática pareja joven ha pagado su préstamo de 300.000 dólares en tan solo 4 meses antes del plazo de 30 años de su préstamo, a un precio de sótano de ganga de 568.046 dólares (desde 569600 - 1554 = 568046). ¡Un final feliz!

This page titled 8.2: Bucles is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform.