【发布时间】:2020-06-16 08:23:29
【问题描述】:
我正在尝试创建一个检查严格相等的函数,并且我想使用三重等号。一些上下文:
> 3 == '3'
[1] TRUE
> FALSE == 0
[1] TRUE
上述所有检查都返回TRUE,因为输入被强制转换为通用类型。但是我想检查严格的平等。 identical 函数正是我所需要的。
> identical(3,'3')
[1] FALSE
> identical(FALSE, 0)
[1] FALSE
现在我想以一种更简洁、更简洁的方式来实现它。与 Javascript 一样,我想使用三等号。我写了这个函数:
`===` <- function(a,b){
identical(a,b)
}
但是这并不像预期的那样:
> 3 === 3
Error: unexpected '=' in "3 ==="
我错过了什么? 谢谢
【问题讨论】:
-
我对R一无所知,但我猜它的语法不允许
===运算符? -
如果您想创建自己的中缀相等运算符,您需要使用
%%,正如 Maurits 指出的那样。 R 标记器/解析器将无法识别语言规范中未另外定义的符号。 -
@MrFlick 不知何故
data.table设法定义了:=;我记得在某个时间点读到过这个,但不记得任何细节。你知道data.table是如何在没有%s 的情况下定义一个新的中缀(-like?)运算符的吗? -
@MauritsEvers 这并不完全正确。
:=恰好已经在解析器中定义(计划使用但从未获得默认定义的剩余运算符)。如果他们想使用其他任何东西,比如~=或@=,那是不可能的。他们只是“幸运”了一个解析器可以识别的剩余运算符。如果不更改 R 本身的源代码,就无法创建自己的。
标签: r function symbols equality