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

sdg*_*sdh 5 r operators infix-notation operator-precedence

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

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

x %foo% y %bar% z
Run Code Online (Sandbox Code Playgroud)

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

如何更改优先级,以便例如%bar%始终执行%foo%?在上面的例子中,这将是:

x %foo% (y %bar% z)
Run Code Online (Sandbox Code Playgroud)

Nic*_*edy 5

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

`%foo%` <- `+`
`%bar%` <- `*`
1 %bar% 2 %foo% 3
#5
1 %foo% 2 %bar% 3
#9
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一选择是重新定义一个现有的运营商来做你想做的事.但是,这本身会产生影响,因此您可能希望将其限制在函数内.

还值得注意的是,substitute在首次编写表达式时,using 不会更改已设置的运算符优先级:

eval(substitute(2 + 2 * 3, list(`+` = `*`, `*` = `+`)))
#10
2 * 2 + 3
#7
Run Code Online (Sandbox Code Playgroud)