es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.