如何在R中轻松创建范围变量

时间:2017-09-14 18:10:23

标签: r scope global-variables

我想创建一个接收 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

2 个答案:

答案 0 :(得分:2)

您需要在不同的环境中工作。见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)

  

local评估本地环境中的表达式。它是等价的   到evalq除了它的默认参数创建一个新的空   环境。这对于创建匿名递归函数很有用   并且作为一种有限的命名空间特征,因为变量定义于   从外面看不到环境。

答案 1 :(得分:0)

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

print_x = function(){
  x = 3
  print(x)
}

x = 1

> print(x)
[1] 1
> print_x()
[1] 3