2

如果要创建自己的中缀函数,则需要具有%fun_name%. :=为什么of不是这种情况tidyverse?还有,跟算子一样!!,形式也一样tidyverse

4

1 回答 1

2

这些运算符不是函数。它们仅在作为参数的一部分提供给使用非标准评估并知道如何处理它们的函数时才有意义。R 解释器不会将这些运算符视为函数,您不能直接调用它们。如果您!!something在 quasiquoted 参数之外调用,解释器会将其视为:

!(!(something))

如果你:=在一个 quasiquoted 参数之外调用你会得到一个异常。

顺便说一句,您始终可以重载基本中缀函数或为它们定义新的 S3 方法,而无需%. 解释器总是将这些符号视为中缀函数并且它们不是保留的。例如:

> `+` <- function(x,y) x - y

> 1 + 2
[1] -1

`/.foo` <- function(x, y) x * y

> my_object <- structure(1, class = "foo")

> 1 / 2
[1] 0.5

> my_object / 2

[1] 2
attr(,"class")
[1] "foo"

出于某种原因,R 确实允许定义函数:=并将结果函数评估为中缀函数。但是,这不是如何rlangdata.table实际实施:=的。其他以 开头:,例如:+,或以 结尾=,例如的符号!=不被解释为中缀函数;我不确定为什么会出现这种情况,因为该符号:=未在基础 R 中使用。解释器将其评估为中缀函数的独特能力是出乎意料的,至少对我来说是这样。


> `:=` <- function(x,y) x - y

> 5 := 2

[1] 3

于 2020-09-10T15:42:44.980 回答