Asignar múltiples objetos a .GlobalEnv desde dentro de una función

Una publicación aquí un día atrás me ha preguntado cómo asignar valores a múltiples objetos en el entorno global desde dentro de una función. Este es mi bash de usar lapply ( assign puede ser más seguro que <<- pero nunca lo he usado y no estoy familiarizado con él).

 #fake data set df <- data.frame( x.2=rnorm(25), y.2=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) ) #split it into a list of data frames LIST <- split(df, df$g) #pre-allot 5 objects in R with class data.frame() V <- W <- X <- Y <- Z <- data.frame() #attempt to assign the data frames in the LIST to the objects just created lapply(seq_along(LIST), function(x) c(V, W, X, Y, Z)[x] <<- LIST[[x]]) 

Por favor, siéntase libre de acortar cualquiera / todas las partes de mi código para que esto funcione (o funcione mejor / más rápido).

Tiene razón en que assign() es la herramienta adecuada para el trabajo. Su argumento de envir le proporciona un control preciso sobre dónde tiene lugar la asignación, control que no está disponible con <- o <<- .

Entonces, por ejemplo, para asignar el valor de X a un objeto llamado NAME en el entorno global, harías:

 assign("NAME", X, envir = .GlobalEnv) 

En tu caso:

 df <- data.frame( x.2=rnorm(25), y.2=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) ) LIST <- split(df, df$g) NAMES <- c("V", "W", "X", "Y", "Z") lapply(seq_along(LIST), function(x) { assign(NAMES[x], LIST[[x]], envir=.GlobalEnv) } ) ls() [1] "df" "LIST" "NAMES" "V" "W" "X" "Y" "Z"