Я пытаюсь извлечь все символы внутри тела функции, которые не были определены в этой функции, но были определены где-то в стеке среды. Первоначально я думал, что могу сделать это, используя возвращаемое значение codetools::findGlobals
, но, видимо, эта функция не делает именно то, что я думал, поскольку она пропускает переменные, на которые ссылаются внутри выражения в кавычках. Смотрите воспроизводимый пример ниже:
x = 2
y = 1
hidden = function() {
eval(quote({ x + y }))
}
revealed = function() {
x + y
}
codetools::findGlobals(hidden)
codetools::findGlobals(revealed)
Учитывая это ограничение findGlobals
, есть ли предпочтительный альтернативный метод?
eval(as.name(paste0("a","b")))
, это все равно было бы трудно обнаружить, потому что вы динамически создаете код. Но в этом случае функцияfind_vars()
из другого вопроса сделает то, что вы хотите, и извлечет все эти символы. - person MrFlick   schedule 21.08.2019