[英]Is it possible to move a variable from the global environment into a separate environment?
是否可以將駐留在全局環境中的變量移動到單獨的環境中以整理全局命名空間? 我了解如何在單獨的環境( with(env, ...)
)中創建變量,但是有沒有一種有效的方法可以在全局環境中創建后移動它們。 我想可以將它們復制到一個單獨的環境中,然后將它們從全局環境中刪除,但想知道是否有更有效的方式。
您可以在with
中使用多行。
e1 <- new.env()
e2 <- new.env()
with(e1, {
k <- l <- m <- 0L
x <- 1
fo <- y ~ x
fun <- function(x) x^2
})
對象在e1
中創建,
ls(e1)
# [1] "fo" "fun" "k" "l" "m" "x"
e2
保持為空,
ls(e2)
# character(0)
並且在.GlobalEnv
中,到目前為止只有環境存在。
ls(.GlobalEnv)
# [1] "e1" "e2"
要使用對象,還可以使用with
或$
。
with(e1, fun(2))
# [1] 4
e1$fun(2)
# [1] 4
使用rlang
library(rlang)
a <- 111
b <- "hello"
my_envir <- env(!!! as.list(.GlobalEnv))
-檢查
> ls(my_envir)
[1] "a" "b"
> my_envir$a
[1] 111
不確定這是否是個好主意,但您可以將它們附加到搜索路徑。 從新鮮香草開始 R session 試試這個。
a <- 1
b <- 2
attach(as.list(.GlobalEnv), name = "myenv")
rm(a, b)
ls("myenv")
ls()
a
b
也許:
library(purrr)
a <- 111
b <- 'hello'
my_envir <- new.env()
names(.GlobalEnv) %>%
walk(~ assign(.x, get(.x), envir = my_envir))
eapply(my_envir, function(x) x)
#> $my_envir
#> <environment: 0x7fed59e56dc8>
#>
#> $a
#> [1] 111
#>
#> $b
#> [1] "hello"
或者
library(purrr)
a <- 111
b <- 'hello'
my_envir <- new.env()
eapply(.GlobalEnv, function(x) x) %>%
discard(is.environment) %>%
{walk2(., names(.), ~{
assign(.y, .x, envir = my_envir)
exec('rm', .y, envir = .GlobalEnv)}
)}
eapply(my_envir, function(x) x)
#> $a
#> [1] 111
#>
#> $b
#> [1] "hello"
由代表 package (v2.0.1) 於 2021 年 12 月 31 日創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.