我想了解 R 的 data.table 中
:=
语法和 := 语法之间的根本区别。我使用此函数以编程方式生成列名称。
我试图找出为什么最后一行代码不起作用:
#Make test data
test <- data.table()
test[, a := 1:5]
test[, b := 6:10]
#Create c column in various ways
test[, c := a+b] #works
test[, `:=`(c = a+b)] #works
test[, paste0("c") := a + b] #works
test[, `:=`(paste0("c") = a + b)] #does not work
这个例子非常简单。我使用这种类型的 Paste0 以编程方式生成列名称。我知道
test[, paste0("c") := a+b]
有效。但是,我想了解为什么同样的事情,但在 :=
语法中却不会。这对我来说很奇怪。另外,使这项工作正常进行,将使我的代码更干净。
我们以加法为例。如果你这样做
3 + 2
与
相同`+`(3, 2)
当您调用像
+
这样的“中缀”函数时,它与调用带有两个参数(左侧和右侧)的函数相同。所以当你使用该功能时
a := b
与
相同`:=`(a, b)
其中没有命名参数。请注意,其中没有
=
。人们使用 :=
的主要原因是,在 R 语言语法中,定义函数参数时,=
不能在左侧包含表达式。它只允许字符值或符号。表情
foo(paste0("c") = a + b)
R 解析器无法理解。这根本不是特定于 data.table 的。即使你只是跑步
quote(foo(paste0("c") = a + b))
你得到了错误
Error: unexpected '=' in "quote(foo(paste0("c") ="
你的最后一行只是无效的 R 语法。