带词法范围的 tidyr 准引用

tidyr quasiquotation with lexical scoping

我意识到 tidy 求值不使用词法范围,但我希望 rlang 中的准引号在我决定的环境中查找符号。

当前行为:

envir <- new.env(parent = globalenv())
eval(parse(text = "little_b <- 'b'"), envir = envir)
eval(rlang::expr(!!little_b), envir = envir)

## Error in (function (x)  : object 'little_b' not found

相反,我想要最后一行 return "b"。如果您发现 eval() 的版本可以在此处完成工作并且像 evaluate::try_capture_stack().

一样工作,则可以获得奖励积分

仅供参考:我正在尝试解决 this issue

我们可以使用with在环境中传递表达式

with(envir, expr(!!little_b))
#[1] "b"

或者另一种选择是 local

local(rlang::expr(!!little_b), envir = envir)
#[1] "b"

或通过 quoteeval 中传递(如@lionel 所述)

eval(quote(expr = rlang::expr(!! little_b)), envir = envir)
#[1] "b"