Обновление 2018-10-10:
Самый краткий способ выполнить эту конкретную задачу - использовать list2env()
примерно так:
## 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"
Оригинальный ответ, демонстрирующий использование assign ()
Вы правы, что assign()
- правильный инструмент для работы. Его аргумент envir
дает вам точный контроль над местом назначения - контроль, который недоступен ни с <-
, ни с <<-
.
Так, например, чтобы присвоить значение X
объекту с именем NAME
в глобальной среде, вы должны сделать:
assign("NAME", X, envir = .GlobalEnv)
В вашем случае:
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"