rpubs - Asigne múltiples objetos a.GlobalEnv desde dentro de una función
shiny en r tutorial (1)
Actualización de 2018-10-10:
La manera más sucinta de llevar a cabo esta tarea específica es usar list2env()
así:
## Create an example list of five data.frames
df <- data.frame(x = rnorm(25),
g = rep(factor(LETTERS[1:5]), 5))
LIST <- split(df, df$g)
## Assign them to the global environment
list2env(LIST, envir = .GlobalEnv)
## Check that it worked
ls()
## [1] "A" "B" "C" "D" "df" "E" "LIST"
Respuesta original, demostrando el uso de assign ().
Tienes razón en que assign()
es la herramienta adecuada para el trabajo. envir
argumento que lo envir
le brinda un control preciso sobre dónde se realiza 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ía lo siguiente:
assign("NAME", X, envir = .GlobalEnv)
En tu caso:
df <- data.frame(x = 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"
Una publicación aquí hace un día me hace preguntarme cómo asignar valores a múltiples objetos en el entorno global desde dentro de una función. Este es mi intento 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 o todas las partes de mi código para que esto funcione (o funcione mejor / más rápido).