【发布时间】:2018-06-11 16:59:36
【问题描述】:
bquote 函数允许评估被包裹在.() 调用中的表达式部分。例如,
a <- 2
b <- 100
bquote(.(2 * a) * x + .(log10(b)))
会返回
4 * x + 2
我想重写这个函数来评估除.() 调用中的内容之外的所有内容。这是期望的行为:
a <- 2
b <- 100
bquote(2 * a * .(x) + log10(b))
> 4 * x + 2
我知道要这样做,我必须检查 abstract syntax tree 并在没有 .() 调用的情况下评估早午餐,但我无法处理所有这些递归。
你能帮我写一个这样的函数吗?
【问题讨论】:
-
是否有用例来证明另一种新语法的合理性?它怎么知道评估第一个
*而不是第二个或+? -
也许你可以退一步说一下拥有这样一个功能的目标是什么。
-
这样做的原因是在绘图之前简化计算机生成的方程。
标签: r metaprogramming