Bucle for
Un bucle es una instrucción que se repite hasta que se alcanza una condición específica. Puede haber una situación en la que necesite ejecutar un bloque de código varias veces. En R un bucle se puede utilizar para iterar sobre una lista, data frame, vector, matriz o cualquier otro objeto.
El bucle for
se utiliza para repetir una o más instrucciones un determinado número de veces. De entre todos los bucles, el for
se suele utilizar cuando sabemos el número de veces que queremos que se ejecute.
for (variable in vector) {
  cuerpo (bloque de código)
}
## Imprimir los numeros de in vector
for (i in 1:10) {
print(i)
}
## Guardar los elemntos del vector en otra vector
for (i in 1:10) {
vect_num <- i
}
## Cada vez que corra el loop el vector de va a sobreescribir
## Para evitar eso hay que crear un vector vacio afuera del loop
vect_num <- vector()
for (i in 1:10) {
vect_num[i] <- i
}
## Crear un df con dos columnas, una para organismo y otra para saber que tipo es
df <- data.frame(orga = c("cactus", "helecho", "raton", "gato", "palma", "perro", "amanita"),
tipo = c("planta", "planta", "animal", "animal", "planta", "animal", "hongo"))
## Queremos saber el tipo de organismo que es cada observacion de la columna orga
## Utuilizamos el codigo de if else if else
## realizando un bucle for lo hacemos para cada observacion de la columna orga
for (w in 1:nrow(df)) {
if (df[w, 2] == "planta") { ## si la condicion es verdadera
print(paste(df[w, 1], "es una planta")) ## Es una planta
} else if (df[w, 2] == "animal") { ## si la condicion es falsa
print(paste(df[w, 1], "es una animal")) ## Es una animal
} else { ## si la condicion es falsa
print(paste(df[w, 1], "es una hongo")) ## Es una animal
}
}
Bucles anidados
La anidación de bucles es necesaria para hacer determinados procesamientos un poco más complejos que los que realiza un bucle simple. Un bucle anidado es cuando un bucle se encuentra en el bloque de instrucciones de otro bloque.
for (variable in vector) {
  for (variable in vector) {
    cuerpo (bloque de código)
}
Para realizar el siguiente ejemplo descargar el archivo Venta de Video Juegos, obtenido de la pagina https://www.kaggle.com/gregorut/videogamesales.
En el siguiente ejemplo tenemos una tabla con las estadísticas de ventas de videojuegos. Para mostrar cómo funciona un bucle for
anidado voy a filtrar la tabla por Consola (Plataform) y por Género (Genre), después voy a guardar cada data frame creado en una carpeta para cada Consola y dentro de esta una carpeta una para el Género.
## Cargar el paquete dplyr
library(dplyr)
## Cargar la base de datos de la venta de videojuegos
games <- read.csv("../data/vgsales.csv")
## Creo un vector con las consolas de mi interes
consolas <- c("3DS", "DS", "GEN", "N64", "NES", "PC", "PS", "PS2", "PS3",
"PS4", "SNES", "Wii", "WiiU", "X360", "XB", "XOne")
## Crear el primer for loop para el vector de consolas
for (i in consolas) {
## Filtrar la columna Platform por consola y eliminar esa variable
consolas <- games %>%
filter(Platform == i) %>%
select(-Platform)
## Crear un vector con los generos de videojuegos para cada consola
genero <- levels(factor(consolas$Genre))
## Crear el segundo for loop para el vector de genero de videojuegos
for (w in genero) {
## Filtrar la columna Genre por genero y eliminar esa variable
genero_df <- consolas %>%
filter(Genre == w) %>%
select(-Genre)
## Crear una nueva carpeta para cada consola
dir.create(paste0("../data/", i), recursive = TRUE)
## Crear una nueva carpeta dentro cada cosola para los generos de videojuegos
dir.create(paste0("../data/", i, "/", w), recursive = TRUE)
## Guardar cada dataframe en su carpeta correspondiente
## Guardar cion el nombre consola_genero_Games.csv
write.csv(genero_df,
file = paste0("../data/", i, "/", w, "/", i, "_", w, "_Games.csv"),
row.names = FALSE)
}
}
Ejercicios Bucle for
Para realizar los ejercicios descargar los siguentes archivos: Ejercicios for