gpt4 book ai didi

r - 为什么是 := allowed as an infix operator?

转载 作者:行者123 更新时间:2023-12-03 11:50:26 24 4
gpt4 key购买 nike

我遇到了流行data.table包和一件事特别引起了我的兴趣。它有一个就地赋值运算符

:=



这在基础 R 中没有定义。事实上,如果你没有加载 data.table包,如果您尝试使用它(例如, a := 2 )会引发错误并显示以下消息:

Error: could not find function ":="



还有,为什么 :=工作?为什么 R 让你定义 :=作为中缀运算符,而其他所有中缀函数都必须被 %% 包围,例如
`:=` <- function(a, b) {
paste(a,b)
}

"abc" := "def"

显然,它并不是 %function.name% 的替代语法。用于定义中缀函数。是 data.table利用 R 的一些解析怪癖?这是一个黑客吗?以后会不会“打补丁”?

最佳答案

这是基本 R 解析器识别并似乎解析为左分配的东西(至少在操作方面或顺序等方面)。见 C source code更多细节。

as.list(parse(text="a:=3")[[1]])
# [[1]]
# `:=`
#
# [[2]]
# a
#
# [[3]]
# [1] 3

据我所知,它是无证的(就基础 R 而言)。但它是一个函数/运算符,你可以改变它的行为
`:=`<-function(a,b) {a+b}
3 := 7
# [1] 10

正如您所看到的,“:”部分本身并没有什么特别之处。它恰好是复合 token 的开始。

关于r - 为什么是 := allowed as an infix operator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26269423/

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