有没有办法在R中禁用词法作用域?我想阻止函数使用其任何父/祖先环境。所需的行为是下面的错误(x
未找到)。
x <- 1
f <- function()
eval(parse(text = "x"),
envir = new.env(),
enclos = new.env())
f() # returns 1
答案 0 :(得分:3)
您可以将函数的环境设置为baseenv()
,而不会搜索全局环境
x <- 1
f <- function() return(x);
environment(f) <- baseenv()
f()
# Error in f() : object 'x' not found
这不会&#34;禁用&#34;词汇范围很大,因为它改变了搜索以跳过全球环境。
如果需要,您可以将baseenv()
与eval(envir=)
或new.env(parent=)
参数一起使用。
x <- 1
f <- function()
eval(parse(text = "x"),
envir = baseenv())
f()
# Error in eval(expr, envir, enclos) : object 'x' not found