Saltar al contenido principal

Bucles for en R

Cuando sabes cuántas veces quieres repetir una acción, un bucle for es una buena opción. Domina los bucles for con este tutorial.
· 5 min leer

Explora con IA


Domina los bucles for y otras funciones esenciales de R con nuestro curso de introducción a R.

Recorrer un vector con un bucle

Cuando sabes cuántas veces quieres repetir una acción, un bucle for es una buena opción. La idea del bucle for es recorrer una secuencia, elemento a elemento, realizando una acción en cada paso. Esa secuencia suele ser un vector de números (como la secuencia 1:10), pero también puede ser una serie desordenada como c(2, 5, 4, 6) o incluso una secuencia de caracteres.

for (value in sequence) {
    code
}

En palabras, sería: "por cada valor de mi secuencia, ejecuta este código". Algunos ejemplos: "por cada fila de mi data frame, imprime la columna 1" o "por cada palabra de mi frase, comprueba si esa palabra es DataCamp".

¡Vamos con un ejemplo! Primero, crearás un bucle que imprima los valores de una secuencia del 1 al 10. Después, modificarás ese bucle para que también sume los valores del 1 al 10, de modo que en cada iteración el siguiente valor de la secuencia se añada a la suma acumulada.

Instrucciones

Se ha creado para ti un vector seq. Completa el bucle for usando seq como secuencia. Imprime value en cada iteración. Se ha creado una variable sum. Usa el bucle para sumar los números de seq. En cada iteración, suma value a sum y, a continuación, imprime sum.


# Sequence
         seq <- c(1:10)

         # Print loop
         for (value in ___) {
           print(___)
         }

          # A sum variable
          sum <- 0

          # Sum loop
          for (value in seq) {
          sum <- ___ + ___
          print(___)
          }

Si todo ha quedado claro, sigue con el siguiente ejercicio. Si no, aquí tienes un vídeo de resumen.

Vídeo de resumen sobre bucles for en R

Recorrer filas de un data frame

Imagina que te interesan los días en los que el precio de la acción de Apple sube por encima de 117. Si supera ese valor, quieres imprimir la fecha y el precio actuales. Si tienes un data frame stock con una columna de date y otra de precio de apple, ¿podrías recorrer las filas del data frame para conseguirlo? ¡Desde luego!

Antes de hacerlo, recuerda que puedes obtener el número de filas del data frame con nrow(stock). Luego, puedes crear una secuencia para iterar con 1:nrow(stock).

for (row in 1:nrow(stock)) {
    price <- stock[row, "apple"]
    date  <- stock[row, "date"]

    if(price > 117) {
        print(paste("On", date,
                    "the stock price was", price))
    }
}
[1] "On 2016-12-21 the stock price was 117.06"
[1] "On 2016-12-27 the stock price was 117.26"

Esto combina varias cosas que ya has aprendido: sentencias if, subconjuntos de vectores, condicionales y bucles. ¡Enhorabuena por todo lo aprendido!

Instrucciones

stock está en tu espacio de trabajo.

Rellena los huecos del bucle for para que se cumpla lo siguiente:

  • price debe contener el precio de esa iteración.
  • date debe contener la fecha de esa iteración.
  • Esta vez, quieres saber si apple supera 116.
  • Si lo hace, imprime la date y el price.
  • Si está por debajo de 116, imprime la date e indica que no fue un día importante.

# Loop over stock rows
         for (row in 1:___) {
              price <- stock[___, "___"]
              date  <- stock[___, "___"]

              if(___ > ___) {
                  print(paste("On", ___,
                              "the stock price was", ___))
              } else {
                  print(paste("The date:, ___,
                              "is not an important day!"))
              }
            }

Recorrer elementos de una matriz

Hasta ahora has estado iterando sobre tipos de datos unidimensionales. Si quieres recorrer elementos de una matriz (columnas y filas), tendrás que usar bucles anidados. Usarás esta idea para imprimir las correlaciones entre tres acciones.

La forma más sencilla de pensarlo es: empiezas en la fila 1 y te mueves a la derecha pasando por col1, col2, ... hasta la última columna de la fila 1. Luego bajas a la fila 2 y repites el proceso.

my_matrix
     [,1]   [,2]  
[1,] "r1c1" "r1c2"
[2,] "r2c1" "r2c2"

# Loop over my_matrix
for(row in 1:nrow(my_matrix)) {
    for(col in 1:ncol(my_matrix)) {
        print(my_matrix[row, col])
    }
}
[1] "r1c1"
[1] "r1c2"
[1] "r2c1"
[1] "r2c2"

Instrucciones

La matriz de correlación, corr, está en tu espacio de trabajo.

  • Imprime corr para echar un vistazo a los datos.
  • Completa el bucle for anidado. Debe cumplir lo siguiente:
    • El bucle externo debe recorrer las rows de corr.
    • El bucle interno debe recorrer las cols de corr.
    • La sentencia de impresión debe mostrar los nombres de la columna y la fila actuales, y también su correlación.

  # Print out corr


        # Create a nested loop
        for(row in 1:nrow(___)) {
            for(col in 1:___(corr)) {
                print(paste(colnames(corr)[___], "and", rownames(corr)[___],
                            "have a correlation of", corr[row,col]))
            }
        }

Echa también un vistazo a nuestro tutorial sobre bucles en R.

Temas

Relacionado

Tutorial

A Loops in R Tutorial - Uso y Alternativas

Tutorial

Tutorial sobre bucle for en Python

Tutorial

Tutorial sobre bucles en Python