我为R写了一个二元运算符函数(即一个名称类似于%X%
的函数,以便不必键入%X%(a,b)
,而可以使用更方便的语法a %X% b
。我的目标是为<-
提供一个包装器,该包装器可以记录完成的工作在该环境中访问对象,并检查“保护”属性,该属性会在覆盖该对象之前警告用户。
所有这些工作都是有效的,除了如果我尝试在函数内执行类似a %X% b + c
的操作,您所看到的只是a %X% b
_,这也是它的全部功能;为a分配了b的值,而c则被完全忽略。 a %X% (b + c)
和%X%(a, b + c)
都可以,但是将其编写为二进制运算符的全部目的是避免括号。
如果我覆盖<-
,则其sys.call()
会看到其左侧和右侧的所有内容。为什么我的只能从命令行中看到相邻的名称?
这是复制此问题的代码:
`%X%` <- function(...){
print(deparse(sys.call()));
}
a %X% 3 + 1:10;
期望的结果是“%X%3 + 1:10”
观察结果为“%X%3”
谢谢。
最佳答案
这与运算符优先级有关,请参阅?Syntax
以获取更多帮助。它说像您尝试定义的特殊运算符(%any%
)的优先级高于二进制+
,因此对您而言,除了使用括号和a %X% (b + c)
之外,没有其他方法(AFAIK)。
关于r - 在R中,如何将整个命令行放入二进制运算符的sys.call()中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11813599/