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