En programación existen ciertas herramientas fundamentales y universales denominadas colectivamente
Estructuras de Control. En esta categoría se encuentran los "loops" (lazos, ciclos) y "condicionales".
En esta entrada se va a mostrar el uso del "if" y "else" en R
### Condicionales: if
## Estructura básica:
if(condición) comando
## Se ejecuta el comando si la condición es TRUE
## Entonces:
if(3 > 2) print(' :-D ')
if(3 < 2) print(' :-( ')
## Al igual que vimos antes, se pueden usar las { } para insertar varios
## comandos juntos:
if(3 > 2) {
print('Es verdadero!')
print(' :-D ')
}
### Usando if / else
### La combinación de if + else sirve para lograr este flujo:
/ Sí -----> comando1
Se cumple la condición? |
\ No -----> comando2
## La estructura básica de if / else es:
if(condición) comando1 else comando2
## Cuando se cumple una condición dada, se ejecuta el comando1, en caso
## contrario, se ejecuta el comando2
## Estructura básica, pero usando {}:
if(condición) {
comando1 ## Si la condición se cumple (TRUE)
} else {
comando2 ## Si la condición no se cumple (FALSE)
}
## Ejemplo: combinacion de un loop con if/else
## Clasificación de números del 1 al 10 en 2 grupos
clasif <- numeric(10) # Acá voy a guardar el resultado
for(i in 1:10) {
if(i > 5) { ## Se si se cumple, entonces es "grande"
texto <- paste(i, 'grande')
print(texto)
clasif[i] <- texto ## *1
} else { ## Si no se cumple, entonces es "chico"
texto <- paste(i, 'chico')
print(texto)
clasif[i] <- texto ## *2
}
# clasif[i] <- texto ## Este comando puede sustituir las lineas *1 y *2}
clasif
## Ídem, pero con ifelse
## esquema conceptual (no correr):
ifelse(condición, comando1, comando2)
x <- 1:10
clasif <- ifelse(x > 5, 'grande', 'chico')
clasif <- paste(x, clasif)
clasif
## Para este tipo de casos sencillos el ifelse es mucho más rápido y simple
## que usar un for + if + else
## Hay casos sin embargo, en que usar loops combinados con if y else es
## la mejor opción. Nótese que es necesario hacer un "anidamiento" de
## bloques de comando...
## Ejemplo: Clasificación en tres grupos
clasif <- numeric(10)
for(i in 1:10) {
if(i > 5) {
texto <- paste(i, 'grande')
print(texto)
clasif[i] <- texto
} else {
if(i > 2) {
texto <- paste(i, 'mediano')
print(texto)
clasif[i] <- texto
} else {
texto <- paste(i, 'chico')
print(texto)
clasif[i] <- texto
}
}
}
clasif
## Esquemáticamente:
/ Sí -----> "grande"
(i > 5)? | / Sí -----> "mediano"
\ No -----> (i > 2)? |
\ No -----> "chico"