在R中定义自定义的中缀运算符(例如
)是“常见的”`%op%` <- function(e1, e2) someOperation(e1, e2)
result <- e1 %op% e2
似乎不可能定义一元运算符(例如与!
相对应):
(举一个最小的例子:)
`%op%` <- function(x) x
# the definition works fine
`%op%`
# function(x) x
# but usage fails
%op% x
# Error: unexpected SPECIAL in "%op%"
然而,!
运算符本身似乎是用相同的方式定义的,至少在用户看来是这样的:
`!`
# function (x) .Primitive("!")
但是显然内部结构不同,因为我的功能无法正常工作。是否有特定原因?还是有我不知道的另一种方法? (我无法回忆起提供一元前缀运算符的任何程序包或此类程序包,因此答案很可能是行不通的……)