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"