三等号 R

Mar*_*lis 0 symbols equality r function

我正在尝试创建一个检查严格相等性的函数,我想使用三重等号。一些背景:

> 3 == '3'
[1] TRUE
> FALSE == 0
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

上述所有检查都会返回,TRUE因为输入被强制转换为通用类型。但是我想检查严格的平等。该identical功能正是我所需要的。

> identical(3,'3')
[1] FALSE
> identical(FALSE, 0)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

现在我想以更简洁、更简洁的方式实现这一点。就像在 Javascript 中一样,我想使用三重等号。我写了这个函数:

`===` <- function(a,b){
  identical(a,b)
}
Run Code Online (Sandbox Code Playgroud)

然而,这并不像预期的那样:

> 3 === 3
Error: unexpected '=' in "3 ==="
Run Code Online (Sandbox Code Playgroud)

我错过了什么?谢谢

Mau*_*ers 6

您可以定义一个中缀运算符(使用ein%e%表示“相等”;-):

`%e%` <- function(a, b) identical(a, b)
3 %e% 3
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望将三重等号作为

`%===%` <- function(a, b) identical(a, b)
3 %===% 3
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

或者一个带有向量的例子

1:3 %===% 1:3
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

这些中缀操作(操作符用于操作数之间)也可以写成

`%===%`(1:3, 1:3) 
Run Code Online (Sandbox Code Playgroud)

就像你可以写的一样

`==`(3, 3)
Run Code Online (Sandbox Code Playgroud)

  • @MarcoDeVirgilis在更广泛的背景下也许很有趣:[为什么选择 % 作为运算符分隔符](https://community.rstudio.com/t/why-was-chosen-as-the-operator-delimiter/3309) (2认同)