R 如何查找隐藏在函数内部的*所有*词汇引用变量?

R 如何查找隐藏在函数内部的*所有*词汇引用变量?,r,eval,non-standard-evaluation,R,Eval,Non Standard Evaluation,我试图提取函数体中的所有符号,这些符号没有在该函数中定义,而是在环境堆栈的某个位置定义的。我原本以为可以使用codetools::findGlobals的返回值来实现这一点,但显然这个函数并没有像我所想的那样,因为它忽略了引用表达式中引用的变量。参见下面的可复制示例: x = 2 y = 1 hidden = function() { eval(quote({ x + y })) } revealed = function() { x + y } codetools::findGloba

我试图提取函数体中的所有符号,这些符号没有在该函数中定义,而是在环境堆栈的某个位置定义的。我原本以为可以使用
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”)))
的事情,这仍然很难检测到,因为你是在动态构建代码。但在本例中,函数将执行您想要的操作并提取所有这些符号。