忽略函数内的父/祖先环境(禁用词法作用域)

时间:2016-11-23 21:01:15

标签: r scope environment

有没有办法在R中禁用词法作用域?我想阻止函数使用其任何父/祖先环境。所需的行为是下面的错误(x未找到)。

x <- 1
f <- function() 
  eval(parse(text = "x"), 
       envir = new.env(), 
       enclos = new.env())
f() # returns 1

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