Otros bucles de uso menos frecuente pero tremendamente útiles si queremos hacer simulaciones de datos son while y repeat (combinado con la instrucción break).

While

La orden while se ejecutará mientras haya una condición que se cumpla, es decir que sea verdadera:

while (condicion verdadera){
  #operaciones
}

Por ejemplo, dados los objetos x y j que yo voy a crear con valor 0 para x, y 2 para el j:

x<-0
j<-2

Mi bucle se ejecutará bajo la regla de que x sea menor que 5. la primera instrucción dentro del bucle es que a x se le sume 1, con lo cual irá aumentando su valor numérico. Igual con j. Al aumentar el valor de x, en cada iteración, llegará un momento en que alcanzará el valor de 5 y la condición especificada en el inicio del bucle dejará de cumplirse y el bucle se detendrá. El objeto x nos sirve de contador de las veces que se han producido iteraciones, porque cada vez que se produce una, a x se le suma 1.

while(x<5){
  x<-x+1
  j<-j+5
}
x
## [1] 5
j
## [1] 27

Repeat

repeat se ejecutará de manera perpetua hasta que haya algo dentro del bucle que le haga pararse. Si no lo especificamos estará ejecutándose hasta que salgamos del programa de manera forzada. Es necesario introducir entonces reglas para que de alguna manera el bucle se pare. La manera es introducir un condicionante con ify else de manera que en una de las dos opciones podamos introducir la instrucción break:

Vamos a introducir un objeto “contador” que vamos a poner a 0 y en cada iteración del bucle, suceda lo que suceda, se añada 1 hasta que el bucle se pare. Así sabemos cuántas veces se han ejecutado las iteraciones de las operaciones.

vamos a crear un objeto dado, que emula a un dado de seis caras con la función sample(). En el ejemplo toma aleatoriamente valores entre el 1 y el 6, lo hace una sola vez.

Después, nos saca el resultado de la tirada de dado por pantalla.

Si el resultado de la tirada es el 5, entonces la condición impuesta en if es verdadera y se ejecuta el final del bucle con break.

contador<-0
repeat{
dado<-sample(1:6,1)
print(dado)
contador<-contador+1
if (dado==5){
  break
}

}
## [1] 2
## [1] 5

Podemos acceder al objeto contador para ver cuántas tiradas ha hecho hasta sacar un 5.