r - 在 R 中,如何确定用户定义的中缀运算符的运算符优先级?

标签 r operators operator-precedence infix-notation

假设我在 R 中有两个自定义中缀运算符:%foo%%bar% .

我有使用这两个运算符的表达式,例如:

x %foo% y %bar% z

如何确定 %foo% 的运算符优先级和 %bar% ?

如何更改优先级,例如,%bar%总是在 %foo% 之前执行?在上面的示例中,这将与以下内容相同:
x %foo% (y %bar% z)

最佳答案

我不认为这是明确记录的,而是隐含在 R language documentation 中是中缀运算符都具有相同的优先级,因此从左到右执行。这可以证明如下:

`%foo%` <- `+`
`%bar%` <- `*`
1 %bar% 2 %foo% 3
#5
1 %foo% 2 %bar% 3
#9

我能想到的唯一选择是重新定义现有运算符之一来执行您想要的操作。但是,这本身会产生影响,因此您可能希望将其限制在一个函数内。

还值得注意的是,使用 substitute不会更改第一次编写表达式时已经设置的运算符优先级:
eval(substitute(2 + 2 * 3, list(`+` = `*`, `*` = `+`)))
#10
2 * 2 + 3
#7

关于r - 在 R 中,如何确定用户定义的中缀运算符的运算符优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044891/

相关文章:

r - 如何在 R 中将默认浏览器设置为 Internet Explorer?

r - 从 R 中的数据轻松打印漂亮的树状图

Java计算器(运算顺序)

C++ 条件运算符

matlab - Matlab中元素乘法的优先级

c++ - cout 语句中首先运行的是什么? (C++17)

r - 如何在 R 中计算要删除的最少观察数以实现 2 组之间的完全可分离性

r - 以年为间隔分解时间序列

javascript - 如何确定 javaScript 中扩展运算符结果的数据类型?

c++ - C++中链调用中的评估顺序