Рассмотрим функцию fun1()
.При вызове не присваивается значение 2
xx
в .GlobalEnv
.
fun1 <- function(x) eval(expr=substitute(x))
fun1({xx <- 2; xx})
## [1] 2
xx
## Error: object 'xx' not found
Значение по умолчанию для аргумента envir
из eval()
:
formals(eval)$envir
## parent.frame()
В fun2()
для аргумента envir
явно установлено значение по умолчанию parent.frame()
.При вызове fun2()
присваивается значение 2
xx
в .GlobalEnv
.
fun2 <- function(x) eval(expr=substitute(x), envir=parent.frame())
fun2({xx <- 2; xx})
## [1] 2
xx
## [1] 2
(протестировано с версией R 3.5.0)
Почему это так?Это поведение предназначено?