首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用整洁的eval框架修改表达式中的符号

使用整洁的eval框架修改表达式中的符号
EN

Stack Overflow用户
提问于 2022-07-08 11:13:51
回答 1查看 32关注 0票数 2

我希望使用整洁的eval框架来替换函数lazyeval::interp()。基本上,我有一个简单的表达:

代码语言:javascript
复制
library(rlang)
expr((a + 5 + b)/3)
#> (a + 5 + b)/3

我想替换这个表达式,以便ab符号分别变成cd。对于懒虫来说,这很容易:

代码语言:javascript
复制
lazyeval::interp(expr((a + 5 + b)/3), a = expr(c), b = expr(d))
#> (c + 5 + d)/3

该函数具有允许指定列表或环境的.values参数:

代码语言:javascript
复制
lazyeval::interp(expr((a + 5 + b)/3), .values=list(a = expr(c), b = expr(d)))
#> (c + 5 + d)/3
lazyeval::interp(expr((a + 5 + b)/3), .values=as.environment(list(a = expr(c), b = expr(d))))
#> (c + 5 + d)/3

我天真地认为,我可以用不推荐的函数rlang::expr_interp -或者用rlang::inject()代替。事实并非如此:

代码语言:javascript
复制
expr_interp(expr((a + 5 + b)/3), as.environment(list(a = expr(c), b = expr(d))))
#> (a + 5 + b)/3

我知道我可以使用基函数替代它(就像interp函数一样),但是我想找到一种修改表达式/调用的方法,以便一个符号可以被另一个符号替换为rlang

EN

回答 1

Stack Overflow用户

发布于 2022-07-08 12:04:08

命名内插超出了tidyeval的范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72910566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档