如何在R中轻松创建示波器变量



我想创建一个接收 3 的变量 x 。它创建了另一个范围,其中 x 接收 1 。但是,随着范围结束, x 值将返回到3。我该怎么做?

我的意思是在下面的代码中显示。我想做这样的事情:

x <- 3
{x = 1
print (x)}  //{} Is the way I thought to make x=1 be in another scope 
print (x)

具有这样的输出:

[1] 1
[1] 1

,但我希望输出为:

[1] 1
[1] 3

您需要在不同的环境中工作。参见http://adv-r.had.co.nz/environments.html

这样做的一种简单方法是使用功能。

x <- 3
funky <- function() {
  x = 1
  print (x)
  }
funky()  
# [1] 1
print (x)
# [1] 3

另外,您可以指定环境。

e <- new.env()
x <- 3
e$x <- 1
e$x
# [1] 1
x
# [1] 3

@dason提出了一个很好的观点,即功能local简化处理替代环境。

x <- 3
local({
  x <- 1
  print(x)
})
# [1] 1
print(x)
# [1] 3

来自help(local)

本地评估本地环境中的表达。它是等效的 提出evalq,但其默认参数创建了一个新的,空的 环境。这对于创建匿名递归功能很有用 作为一种有限的名称空间功能,因为变量在 从外部看不到环境。

函数具有局部变量,并在检查全局变量之前先查看那里。所以你可以做这样的事情

print_x = function(){
  x = 3
  print(x)
}
x = 1
> print(x)
[1] 1
> print_x()
[1] 3

相关内容

  • 没有找到相关文章

最新更新