top of page

BUCLES FOR

Ancla 1

Bucles for (loops)

El lenguaje de programación R nos permite crear estructuras repetitivas llamadas bucles.

  • BUCLES FOR SIMPLES

Antes de comenzar con la programación de bucles for en R, veamos un ejemplo claro para entender el concepto de los mismos.

Imaginemos una carrera de coches de Fórmula 1. Los pilotos se encuentran en un circuito y tienen que dar un número determinado de vueltas al mismo para llegar a la meta. Supongamos una carrera de 40 vueltas. 
El bucle for en este caso significa que, por cada vuelta, el piloto tiene que hacer el recorrido del circuito. Es decir, en la primera vuelta, el piloto hace el recorrido entero; en la segunda vuelta, el piloto hace otra vez el recorrido; y así hasta la última vuelta, en nuestro caso la número cuarenta, donde el piloto vuelve a realizar el recorrido. Una vez se ha completado este último, el piloto para porque ha llegado a la meta (se ha finalizado el bucle).

La escritura genérica en R de los bucles es:

 

                                                                           for(i in vinic:vfin){
                                                                               tareas o comandos a realizar

                                                                           }


En el ejemplo anterior de la F1, el bucle se escribiría de la siguiente manera:

for(vuelta in 1:40){
    hacer el recorrido del circuito
}

Ancla 4

¡A TENER EN CUENTA!

¡Es importante la forma de colocar las llaves! 


Existen muchas maneras de hacerlo. La más sencilla aparentemente es la siguiente:
for (i in 1:n){tareas o comandos a realizar}


Sin embargo, esta forma puede ser algo más laboriosa y difícil de entender cuando los comandos a realizar de la estructura repetitiva no son sencillos o cuando nos encontramos frente a bucles anidados.
Por ello, el profesor recomendó otra manera de escribir el comando:

 

    for (i in 1:n){
        tareas o comandos a realizar
    }

¿Como se hace? Se escribe for, se abre un paréntesis donde se va a escribir la variable de control, que puede ser la i o cualquier otra letra o nombre, seguido de in y luego el valor inicial, dos puntos, y el valor final que va a adquirir la variable de control. Seguido del paréntesis colocamos la primera llave. La segunda llave, el que cierra el bucle, se coloca dos líneas por debajo, es decir, dándole al botón enter dos veces. En la línea que se ha quedado vacía entre las llaves, le damos una vez al botón de tabulación y, una vez hecho esto, escribimos los comandos a realizar.
Siguiendo estas instrucciones, los bucles y los comandos dentro de ellos se identificarán a simple vista.

 

  • BUCLES ANIDADOS

Los bucles anidados consisten en dos o más bucles dentro uno dentro de otro.

Pongamos un ejemplo para entender mejor el concepto. Imaginemos la situación de ir a ver una película al cine. Cuando se entregan las entradas, se especifica en ellas el número de la fila en la que se debe sentar el espectador y, dentro de esa fila, la butaca correspondiente. Supongamos que 5 amigos van al cine y quieren saber cuál es su asiento.

 

La escritura genérica en R de los bucles anidados es:

 

                                                                     for (i in vinic1:vfin1){

                                                                          for (j in vinic2:vfin2){

                                                                               for (k in vinic3:vfin3){

                                                                                    tareas o comandos a realizar

                                                                               }

                                                                           }

                                                                      }

En el ejemplo visual, el bucle se programaría de la siguiente forma, siendo n el número total de filas en la sala y m el número de butacas en cada fila:

 

for(amigo in 1:5){

     for(fila in 1:n){

          for(butaca in 1:m){

              Comprobar si es el número asignado (se haría con un bucle if o condicional)

          }

     }

}

 

Una vez que se termina el bucle, ya todos los amigos sabrán cuál es su sitio y se podrán sentar en él. No obstante, para programar esta situación, sería recomendable utilizar también una estructura condicional para finalizar el bucle de las filas y las butacas en cuanto se diesen con las adecuadas y así seguir con el siguiente amigo en vez de que, como hemos escrito sin el bucle if, por cada amigo, se revisaran todas las butacas posibles en todas las filas de la sala. 

¡A TENER EN CUENTA!

Se pueden añadir comentarios

También se pueden poner comentarios detrás de la llave como #fin bucle i para ubicarse más fácilmente. Esto es de gran ayuda en los bucles anidados, pero también se puede hacer en los bucles for simples.

En el ejemplo genérico se podrían poner de la siguiente manera:
for (i in vinic1:vfin1){
    for (j in vinic2:vfin2){
        for (k in vinic3:vfin3){
            tareas o comandos a realizar
        } #fin bucle k
    } #fin bucle j
} #fin bucle i
 

Ancla 2

Ejercicios

DIFICULTAD BAJA:

Bucles for

Dados los vectores:

u = (3,10,-2,4.9)

v = (-7,-3,3,28)

Se pide:

a)    Sumar las componentes del vector u y almacenar el resultado en SumaU.

b)    Sumar los vectores u y v; mediante bucles for.

c)    Multiplicar los vectores escalarmente y almacenar el resultado en ProductoEscalar.

d)    Multiplicar u y v componente a componente.

DIFICULTAD MEDIA:

 

Bucles for anidados

Dados los vectores siguientes

   U=c (1,7,6,8)

   V=c (2,25,7,8)

   W=c (25,18,45,22)

   X= c (5,4,8,3)

  1. Multiplicar los vectores U y X componente a componente

  2. Construir la matriz A (función rbind)

  3. Construir una matriz B formada por números aleatorios

  4. Sumar ambas matrices

  5. Multiplicar ambas matrices (bucles)

DIFICULTAD ALTA:

Bucles for anidados

 

a)  Formar la matriz A cuyas columnas son los vectores:

·    V → (2.5,4,8)

·    U → 3 números aleatorios entre 2 y 6 (comando runif)

·    W→ Números impares entre 9 y 13 (comando seq).

b)  Almacenar el valor máximo de la matriz, así como su posición (max,imax,jmax).

c) Calcular A^2

d) Crear el vector X compuesto por los valores de la diagonal principal de A^2 y encontrar el valor máximo de dicho vector.

soluciones

Ancla 3
DIFICULTAD BAJA: BUCLES FOR

DIFICULTAD MEDIA: BUCLES FOR ANIDADOS

DIFICULTAD ALTA: BUCLES FOR ANIDADOS

bottom of page