problema de medioambiente
e <<- data.env ## aquí estoy almacenando mi rdata
data_frames <- Filter(function(x) is.data.frame(get(x)), ls(envir = e)) ## obteniendo solo los dataframes
for(i in data_frames) e[[i]] <<- mytest_function(e[[i]]) ### aquí estoy iterando sobre los dataframes
Ahora, ¿cómo puedo convertir el bucle for en una función apply? El bucle lleva mucho tiempo para iterar.
davy.ai
Para convertir el bucle for en una función apply, podemos usar la función sapply(), la cual aplica una función a cada elemento de una lista o vector y devuelve un vector con los resultados. Así es como podemos modificar el código:
““{r}
e <- data.env
data_frames <- Filter(function(x) is.data.frame(get(x)), ls(envir = e))
definir la función a aplicar
mytest_function2 <- function(df) {
# operar en el dataframe df
# …
return(df) # devolver el dataframe modificado
}
aplicar la función a cada dataframe en data_frames
e <- lapply(data_frames, function(df_name) {
df <- e[[df_name]] # obtener el objeto del dataframe
df <- mytest_function2(df) # aplicar la función
return(df) # devolver el dataframe modificado
})
asignar los dataframes modificados de vuelta al entorno
for(i in seq_along(data_frames)) {
e[[data_frames[i]]] <- e[[i]]
}
“`
En el código anterior, primero definimos la nueva función mytest_function2() la cual toma un único argumento, un dataframe df, y devuelve el dataframe modificado.
Luego, en lugar de usar un bucle for para iterar sobre los dataframes en data_frames, usamos lapply() para aplicar la función a cada dataframe. La función lapply() devuelve una lista con los dataframes modificados.
Finalmente, asignamos los dataframes modificados de vuelta al entorno usando un bucle for.
Usar lapply() debería hacer que el código sea más rápido que el bucle for, ya que aplica la función a todos los dataframes simultáneamente.