Is there a way to disable lexical scoping in R? I want to prevent a function from using any of its parent/ancestor environments. The desired behavior is an error below (
x <- 1
f <- function()
eval(parse(text = "x"),
envir = new.env(),
enclos = new.env())
f() # returns 1
You can set the environment of your function to be the
baseenv() which will not search the global environment
x <- 1 f <- function() return(x); environment(f) <- baseenv() f() # Error in f() : object 'x' not found
This doesn't "disable" lexical scoping so much as it changes the search to skip the global environment.
You can use
baseenv() with the
new.env(parent=) parameters if you need to.
x <- 1 f <- function() eval(parse(text = "x"), envir = baseenv()) f() # Error in eval(expr, envir, enclos) : object 'x' not found