我为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/

10-11 22:51
查看更多