2016-11-23 1 views
0

Есть ли способ отключить лексическое охват в R? Я хочу, чтобы функция не использовала какую-либо из ее родительских/предков. Желаемое поведение - ошибка ниже (x не найдена).игнорировать окружение родителя/предка внутри функции (отключить лексическое охват)

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

ответ

3

Вы можете установить окружение вашей функции быть baseenv(), которая не будет искать глобальную окружающую среду

x <- 1 
f <- function() return(x); 
environment(f) <- baseenv() 
f() 
# Error in f() : object 'x' not found 

Это не «отключить» лексическую области видимости так, как он меняется в области поиска пропустите глобальную среду.

Вы можете использовать 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 
Смежные вопросы