Рассмотрим следующий вложенный список, nest
.Рекурсивно отправлять переменные списка в глобальную среду
nest <- list(
A = list(w = 1:5, x = letters[1:5]),
B = list(y = 6:10, z = LETTERS[1:5])
)
Я хотел бы послать все индивидуальные переменные в nest
для глобальной окружающей среды. То есть в списках A
и B
, и векторы w
, x
, y
и z
должны перейти в глобальную среду. Вот несколько моих попыток вместе с их результатами. Обратите внимание, что все они посылают только переменные в глобальную среду.
list2env(nest, .GlobalEnv)
ls()
# [1] "A" "B" "nest"
list2env(unlist(nest, recursive = FALSE), .GlobalEnv)
ls()
# [1] "A.w" "A.x" "B.y" "B.z" "nest"
lapply(nest, list2env, envir = .GlobalEnv)
ls()
# [1] "nest" "w" "x" "y" "z"
with(nest, list2env(mget(ls()), .GlobalEnv))
ls()
# [1] "A" "B" "nest"
Я также пробовал другие рекурсивные возможности и получили ошибки, потому что, когда list2env
попадает в нижней части списка, он приходит к выводу, что x
не список.
rapply(nest, list2env, envir = .GlobalEnv)
# Error in (function (x, envir = NULL, parent = parent.frame(),
# hash = (length(x) > : first argument must be a named list
with(nest, {
obj <- mget(ls())
do.call(list2env, c(obj, envir = .GlobalEnv))
})
# Error in (function (x, envir = NULL, parent = parent.frame(),
# hash = (length(x) > : unused arguments (A = list(w = 1:5,
# x = c("a", "b", "c", "d", "e")), B = list(y = 6:10,
# z = c("A", "B", "C", "D", "E")))
Как я могу рекурсивно называть list2env
так, что все переменные выходят в глобальную окружающую среду? Из свежей R сессии ls()
приведет к
# [1] "A" "B" "nest" "w" "x" "y" "z"
Я также экспериментировал с local
, и я с той же проблемой.
Я думал, что сговор будет идти. Я не могу заставить его работать – rawr