Atribuir vários objects a .GlobalEnv de dentro de uma function

Um post aqui um dia atrás me perguntando como atribuir valores a vários objects no ambiente global de dentro de uma function. Esta é a minha tentativa usando lapply ( assign pode ser mais seguro que <<- mas eu nunca usei e não estou familiarizado com isso).

 #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 sinta-se à vontade para encurtar qualquer / todas as partes do meu código para fazer este trabalho (ou funcionar melhor / mais rápido).

Você está certo que assign() é a ferramenta certa para o trabalho. Seu argumento do envir fornece controle preciso sobre onde a atribuição ocorre – controle que não está disponível com <- ou <<- .

Por exemplo, para atribuir o valor de X a um object chamado NAME no ambiente global, você faria:

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

No seu 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"