Недоумение "замена` в r
-
28-09-2019 - |
Вопрос
Ребята, это сводит меня с ума.
Это работает как ожидалось:
eobj <- substitute(obj <- list(a, b), list(a = 32, b = 33))
eval(eobj)
obj
[[1]]
[1] 32
[[2]]
[1] 33
Теперь попробуйте это:
efun <- substitute(fun <- function() a+ b, list(a = 32, b = 33))
str(efun)
# language fun <- function() 32 + 33
eval(efun)
fun
# function() a+ b
Что здесь происходит? Как на Земле eval
Получает в себя руки на оригинальную форму выражения?
Решение
Потому что при печати fun
Это на самом деле печатает источник функции (см. attributes(fun)
) который не модифицирует substitute
.
Обратите внимание, что когда вы определяете a
или b
В глобальном рабочем месте функции результат одинаковы.
Вы можете увидеть фактический код функции body(fun)
.
Или сравнить:
print.function(fun, useSource=FALSE)
# function ()
# 32 + 33
print.function(fun, useSource=TRUE) # Which is default
# function() a+ b
Не связан с StackOverflow