在 R 中,如何在本地环境中运行代码块,同时从全局环境中获取一些变量

Cat*_*331 1 r

这是一个玩具示例:

{
   tmp_a <- a # a is some variable from Global Environment
   # do something with tmp_a
   a <<- tmp_a
}  
Run Code Online (Sandbox Code Playgroud)

我想要的本质上是一个没有函数头的函数。我希望在程序退出该块后删除该块内创建的所有临时变量。我不想在函数中执行此操作,因为该块太长,并且它访问许多全局变量。将所有变量传递给函数可能会慢得多。

我也尝试过local(),但这样它就不能再访问全局变量了。

G. *_*eck 5

local可以访问其外部的变量。下面的a内部local来自全局环境,tmp_a当局部退出时被破坏。

a <- 1
a <- local({
   tmp_a <- a
   tmp_a <- tmp_a + 1
   tmp_a
})
a
## [1] 2
exists("tmp_a")
## [1] FALSE
Run Code Online (Sandbox Code Playgroud)

请注意,这会以相同的方式工作,因此没有真正的原因您不能使用函数,尽管local在这里似乎更合适。

a <- 1
f <- function() {
   tmp_a <- a
   tmp_a <- tmp_a + 1
   tmp_a
}
a <- f()
a
## [1] 2
exists("tmp_a")
## [1] FALSE
Run Code Online (Sandbox Code Playgroud)