带词法范围的 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"
或通过 quote
在 eval
中传递(如@lionel 所述)
eval(quote(expr = rlang::expr(!! little_b)), envir = envir)
#[1] "b"
我意识到 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"
或通过 quote
在 eval
中传递(如@lionel 所述)
eval(quote(expr = rlang::expr(!! little_b)), envir = envir)
#[1] "b"