2.4 Estructuras de control

Al igual que la mayoría de los lenguajes de programación, R ofrece una serie de estructuras que permiten controlar el flujo de ejecución de nuestro código.

Básicamente, existen dos familias de estructuras, que veremos en los siguientes apartados.

en la ayuda de R (con ?Control). 

2.4.1 Condicionales

Se utilizan para especificar que cierto fragmento de código solo se debe ejecutar cuando se cumpla una (o varias) condiciones. Existen varias alternativas dentro de este tipo de estructura de control, las más importantes son:

  • if-else:
if (a < b) { 
    max<-b 
} else { 
    max<-a 
} 
  • ifelse: se trata de una función que recibe tres argumentos, una expresión a evaluar (de tipo lógico), el resultado cuando la expresión sea cierta y el resultado cuando la expresión sea falsa. Se utiliza mucho por ejemplo con vectores, para evaluar una condición en todos los elementos del vector.
x<-c(1,-2,4,-3.2,0,-9) 
y<-ifelse(x<0, -x, x) 
y 
# [1] 1.0 2.0 4.0 3.2 0.0 9.0 

2.4.2 Bucles

Permiten repetir cierto código un determinado número de veces.

Básicamente existen tres mecanismos para implementar bucles en R:

  • for: recorre los elementos de una secuencia (por ejemplo un vector) y para cada uno de ellos repite el código que se proporciona.
total<-0 
for (i in c(2,3,5,8)) { 
      total<-total + i 
} 
  • while: se ejecuta el código del bucle mientras se cumpla la condición.
y<-0; suma<-0 
while (y < 5) { 
  suma <- suma+y 
  y <- y+1 
} 
  • repeat: se repite cierto código hasta que se ejecuta un break, que indica que saldremos del bucle.
y<-0; suma<-0 
repeat { 
  suma <- suma+y 
  y <- y+1 
  if (y == 5) break 
}

Una cosa que debemos tener en cuenta es que, cuando sea posible llevar a cabo una misma operación por medio de una función predefinida operando sobre un vector o, alternativamente, por medio de un bucle, suele ser mucho más eficiente utilizar la función y el vector que crear nosotros un bucle.

Así pues, en el ejemplo que pusimos para el caso del for, sería más eficiente haber hecho una llamada a la función sum para sumar los elementos del vector que utilizar el bucle arriba indicado. También las funciones apply/lapply/tapply se pueden utilizar con frecuencia para reemplazar bucles (puesto que permiten iterar sobre estructuras complejas de datos).