Las expresiones de control (control statements) son expresiones que se utilizan para controlar la ejecución y el flujo del programa según las condiciones proporcionadas en las expresiones. Estas estructuras se utilizan para tomar una decisión después de evaluar la variable.
Al finalizar esta sección podrás utilizar la expresión if…else para determinar la ruta en la aplicación de un código
La sintaxis de esta expresión es:
if(prueba o condición) {
expresión de control o acción
}
A continuación, un ejemplo del uso de if:
# dato a probar
nx <- 7
# probar si el número es positivo
if(nx > 0){
print("Número Positivo")
}
## [1] "Número Positivo"
nx puede ser el resultado de un cálculo anterior y con el if se le hace una prueba.
En este caso la sintaxis de esta expresión es:
if(prueba o condición){
expresión de control o acción si se cumple la condición
} else {
expresión de control o acción si no se cumple la condición
}
Ejemplo del uso de if…else:
# dato a probar
nx <- -7
# probar si el número es positivo o negativo
if(nx > 0){
print("Número Positivo")
} else {
print("Número Negativo")
}
## [1] "Número Negativo"
El resultado de aplicar una función puede condicionarse a la evaluación de los valores de entrada, según una serie de expresiones condicionales. En este ejemplo vamos a aplicar una función a los valores de presión sanguínea (sistólica y diastólica), para evaluar la categoría de diagnóstico que le corresponde, de acuerdo a la tabla de la American Heart Association.
# creación de función
PSx <- function(s,d) {
if (s <= 90 && d <= 60) {
"Hipotensión"
} else if (s < 120 && d <= 80) {
"Presión Normal"
} else if (s >= 120 && s <= 129 && d <= 80) {
"Presión Elevada"
} else if ((s >= 130 && s <= 139) || (d > 80 && d <= 89)) {
"Hipertensión Etapa 1"
} else if (s >= 140 || d >= 90) {
"Hipertensión Etapa 2"
} else if (s >= 180 || d >= 120) {
"Crisis Hipertensiva"
}
}
Una vez creada la función (PSx), podemos aplicarla a valores medidos de presión sistólica y diastólica.
# función PSx(sistólica, diastólica)
# paciente 1
PSx(117, 79)
## [1] "Presión Normal"
# paciente 2
PSx(128,83)
## [1] "Hipertensión Etapa 1"
Al finalizar esta sección podrás aplicar un código a una secuencia de valores o expresiones condicionales
Los bucles se utilizan en la programación para repetir un bloque de código específico. Existen dos formas principales: for y while.
for (valor indicador in secuencia de valores)
{
expresión
}
A continuación un ejemplo del uso básico de for, para contar los números pares en una secuencia:
# secuencia x de valores
x <- c(2,5,3,9,8,11,6)
# inicio de variable acumuladora
count <- 0
# expresión for
for (val in x) {
if(val %% 2 == 0) count = count+1
}
print(count)
## [1] 3
Los bucles while se utilizan para realizar un bucle hasta que se cumple una condición específica.
Su sintaxis:
while (expresión de control)
{
expresión
}
Ejemplo de uso del bucle while:
# variable con un valor inicial
i <- 1
# bucle while con un contador e instrucción de salida
while (i < 6) {
print(i)
i = i+1
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
Podemos combinar los diferentes tipos de control de flujo, según la tarea que deseamos realizar con los datos. Usualmente hay varias formas de conseguir un mismo propósito, unas más eficientes que otras. A continuación vamos analizar datos adquiridos en encuestas y mediciones relacionadas a los protocolos de prevención de CoviD-19; el propósito es “leer” los datos tomados al final del día y tomar una decisión de cómo actuar con los individuos para el otro día, de acuerdo a un protocolo de seguridad, traducido a expresiones de decisión dentro de un bucle for.
## creación de base de datos inicial
# temperatura máxima registrada en los individuos en un día
Temp <- c(38.5,38.2,36.8,38.4,37.1,38,36.8,37.5)
# Indicador de contacto con positivo confirmado
# 0 = no-contacto, 1 = contacto confirmado
Contacto <- c(0,1,0,1,1,0,0,0)
# variable de acción a tomar con individuo - condición inicial "NA"
Accion <- rep("NA",8)
# número secuencial de identificación
n <- length(Temp)
ID <- seq(1:n)
# data.frame
Entrada <- data.frame(ID,Temp,Contacto,Accion)
Entrada
## ID Temp Contacto Accion
## 1 1 38.5 0 NA
## 2 2 38.2 1 NA
## 3 3 36.8 0 NA
## 4 4 38.4 1 NA
## 5 5 37.1 1 NA
## 6 6 38.0 0 NA
## 7 7 36.8 0 NA
## 8 8 37.5 0 NA
Procesamos los datos según unas reglas de decisión pre-establecidas, y producimos un nuevo data.frame (Entrada) con las acciones a tomar con los individuos.
# bucle con decisiones anidadas
for (i in ID)
{
if (Entrada$Temp[i] < 38 && Entrada$Contacto[i] == 0) {
Entrada[i,4] <- c("Acceso")
} else if (Entrada$Temp[i] >= 38 && Entrada$Contacto[i] != 0) {
Entrada[i,4] <- c("NO-Acceso")
} else if (Entrada$Temp[i] >= 38 || Entrada$Contacto[i] != 0) {
Entrada[i,4] <- c("Vigilancia")
}
}
# mostrar datos
Entrada
## ID Temp Contacto Accion
## 1 1 38.5 0 Vigilancia
## 2 2 38.2 1 NO-Acceso
## 3 3 36.8 0 Acceso
## 4 4 38.4 1 NO-Acceso
## 5 5 37.1 1 Vigilancia
## 6 6 38.0 0 Vigilancia
## 7 7 36.8 0 Acceso
## 8 8 37.5 0 Acceso
R if…else Statement (With Examples), 2017. . DataMentor. URL https://www.datamentor.io/r-programming/if-else-statement/ (accessed 2.8.21).