使用 data.table 创建列 - `:=` 和 := 语法的差异

问题描述 投票:0回答:1

我想了解 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]
有效。但是,我想了解为什么同样的事情,但在
:=
语法中却不会。这对我来说很奇怪。另外,使这项工作正常进行,将使我的代码更干净。

r dataframe data.table
1个回答
0
投票

我们以加法为例。如果你这样做

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 语法。

© www.soinside.com 2019 - 2024. All rights reserved.