Bucles (loops) y condicionales en R
¿Qué son los bucles (loops)?
Los bucles o loops son una declaración (statement) que se ejecuta de forma iterativa sobre una secuencia de items. Así, en lugar de repetir líneas de código para cada item de la secuencia, el bucle realiza una ejecución automática sobre todos los items hasta que se satisface la totalidad.
Bucle for
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
## [1] 21
## [1] 1.732051
## [1] 2
## [1] 2.236068
## [1] 2.44949
## [1] 2.645751
## [1] 2.828427
## [1] 3
## [1] 3.162278
## [1] 4.472136
año <- c('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto',
'Septiembre','Octubre','Noviembre','Diciembre')
for(mes in año){
print(mes)
}## [1] "Enero"
## [1] "Febrero"
## [1] "Marzo"
## [1] "Abril"
## [1] "Mayo"
## [1] "Junio"
## [1] "Julio"
## [1] "Agosto"
## [1] "Septiembre"
## [1] "Octubre"
## [1] "Noviembre"
## [1] "Diciembre"
Bucle for para una lista
mi_lista <- c('banana','manzana','lechosa','naranja','piña')
for(i in seq_along(mi_lista)){
alimento <- mi_lista[[i]]
print(paste('El alimento de mi lista de compra es:', alimento))
}## [1] "El alimento de mi lista de compra es: banana"
## [1] "El alimento de mi lista de compra es: manzana"
## [1] "El alimento de mi lista de compra es: lechosa"
## [1] "El alimento de mi lista de compra es: naranja"
## [1] "El alimento de mi lista de compra es: piña"
Bucle for para una tabla de datos (dataframe)
df <- data.frame(
nombre = c('María','José','Linda','Rafael'),
Edad = c(24,27,23,29),
Sexo = c('F','M','F','M'))
print(df) ## nombre Edad Sexo
## 1 María 24 F
## 2 José 27 M
## 3 Linda 23 F
## 4 Rafael 29 M
for(i in seq_len(nrow(df))){
sujeto <- df[i, ]
print(paste('El sujeto seleccionado es:', toString(sujeto)))
}## [1] "El sujeto seleccionado es: María, 24, F"
## [1] "El sujeto seleccionado es: José, 27, M"
## [1] "El sujeto seleccionado es: Linda, 23, F"
## [1] "El sujeto seleccionado es: Rafael, 29, M"
Bucle while
Este tipo de bucle se utiliza para repetir una instrucción hasta que se satisfaga cierta condición, momento en el cual el proceso automático se detiene.
## [1] 4
## [1] 6
## [1] 8
## [1] 10
Bucle repeat
En este caso es más importante que nunca la declaración break, ya que de lo contrario, el bucle seguirá iterando infinitamente.
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] "El proceso ha finalizado"
## [1] "¡Hola mundo!"
## [1] "¡Hola mundo!"
## [1] "¡Hola mundo!"
## [1] "¡Hola mundo!"
## [1] "¡Hola mundo!"
## [1] "¡Hola mundo!"
## [1] "¡Hola mundo!"
Condicionales if, else
Generalmente se utiliza el condicional, para la toma de decisiones. Veamos algunos ejemplos
a <- 57
b <- 89
if(a < b)
{
print('Si a < b, la diferencia (a - b) es un número negativo')
resta <- a - b
print(paste('La diferencia es:', resta ))
} else{
resta <- a - b
print('Si a > b, la diferencia (a - b) es un número positivo')
print(paste('La diferencia es:', resta))
}## [1] "Si a < b, la diferencia (a - b) es un número negativo"
## [1] "La diferencia es: -32"
Programando una calculadora de índice de masa corporal (IMC)
peso_kg <- 70
talla_metros <- 1.72
IMC <- peso_kg/(talla_metros)**2
print(paste('Su índice de masa corporal es:', IMC))## [1] "Su índice de masa corporal es: 23.6614386154678"
if(IMC < 18)
{
print('Usted tiene muy bajo peso para su talla')
} else if (IMC >= 18 & IMC <= 24.9){
print('Su peso es adecuado para su talla')
} else if (IMC >= 25 & IMC <= 29.9){
print('Usted tiene sobrepeso')
} else{
print('Usted tiene obesidad')
}## [1] "Su peso es adecuado para su talla"