我意识到整洁的评估不会使用词法作用域,但我希望rlang
中的quasiquotation在我决定的环境中寻找符号。
当前行为:
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
相反,我希望最后一行返回"b"
。如果您发现eval()
的版本在此处完成工作且与evaluate::try_capture_stack()
类似,则可获得奖励积分。
仅供参考:我正在努力解决this issue。
答案 0 :(得分:2)
我们可以使用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"