Sección 4 Control de flujo

4.1 Construcción condicional if

Es de la forma if (expr 1) expr 2 else expr 3 donde expr 1 debe producir un valor lógico. Si expr 1 es verdadero (TRUE), se ejecutara expr 2. Si expr 1 es falso (FALSE), y se ha escrito la opcion else, que es opcional, se ejecutara expr 3.

if (3 > 2)
  print("yes")
## [1] "yes"
if (2 > 3)
  print("yes")

if (2 > 3) {
  print("yes")
} else{
  print("no")
}
## [1] "no"

Ejemplo con dos condiciones:

Supongamos que x <- 75 es la nota numérica de examen de un estudiante, queremos asignar nota “A”, “B” o “C”

if (x < 60)
  nota = "C"
if (x >= 60 & x < 80)
  nota = "B"
if (x >=  80)
  nota = "A"

ifelse es la versión vectorizada de if, eto sifnigica que para cada elemento del vector lógico, ejecutará una u otra función dependiendo del valor.

Ejemplo:

nota.num <-
  c(39, 51, 60, 65, 72, 78, 79, 83, 85, 85, 87, 89, 91, 95, 96, 97, 100, 100)

prueba <- ifelse(nota.num >= 60, "aprobado", "desaprobado")
prueba
##  [1] "desaprobado" "desaprobado" "aprobado"    "aprobado"    "aprobado"   
##  [6] "aprobado"    "aprobado"    "aprobado"    "aprobado"    "aprobado"   
## [11] "aprobado"    "aprobado"    "aprobado"    "aprobado"    "aprobado"   
## [16] "aprobado"    "aprobado"    "aprobado"

4.2 Construcción repetitiva for

Es de la forma for (nombre in obj) {expr} donde nombre es la variable de control de iteración, esto sifnifica que asumirá cada valor del objeto obj es un vector (puede ser una secuancia m:n), y expr es una expresión, a menudo agrupada, en cuyas sub-expresiones puede aparecer la variable de control, nombre. expr se evalua repetidamente conforme nombre recorre los valores del objeto obj.

for (i in 1:10) print(i)
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
x = numeric(10)
for (i in 1:10) x[i] = i^2

y = 0
for (i in 1:10) y = y + i

4.3 Construccion repetitiva while

Es de la forma while (expr1) expr2, indicando que se quiere repetir la acción expr2 mientras que ocurra expr1.

i = 0
while (i < 15) {
  print(i)
  i = i + 1
}
## [1] 0
## [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

Ejercitación

  1. Construcción condicional

    Escriba el comando neccesario para poner notas “A”, “B” o “C” dependiendo del valor de final_score: “C” si final_score <60, “B” si 60 =< final_score < 80, “A” si 80 =< final_score =< 100.

  2. Construcción repetitiva

    Usar un ciclo for para contar la cantidad de números mayores a 10 en el vector x <- c(2,5,3,9,8,11,6,8,12,3,57,56), ¿Se podría hacer sin la función for?