gpt4 book ai didi

r - 为什么中缀函数 := from tidyverse need the % around it? 没有

转载 作者:行者123 更新时间:2023-12-04 08:55:51 24 4
gpt4 key购买 nike

如果要创建自己的中缀函数,它需要具有 %fun_name% 的形式。为什么 tidyverse:= 不是这种情况?同样,与运算符!!一样,也形成tidyverse

最佳答案

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

!(!(something))

如果您在半引号参数之外调用 :=,则会出现异常。

顺便说一句,您始终可以重载基本中缀函数或为它们定义新的 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

关于r - 为什么中缀函数 := from tidyverse need the % around it? 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63832972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com