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)
我错过了什么?谢谢
您可以定义一个中缀运算符(使用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)