data.table错误I(x):= y和`:=`(I(x)= y)之间的差异

Shi*_*ton 2 r data.table

遇到我认为是data.table中的错误:

可重复的例子:

d.test <- data.table(a = 1:5)
newName <- "Moose"
Run Code Online (Sandbox Code Playgroud)

这有效:

d.test[, I(newName) := a + 1]
Run Code Online (Sandbox Code Playgroud)

这不是:

d.test[, `:=`(I(newName) = a + 1)]
Run Code Online (Sandbox Code Playgroud)

有没有理由为什么第二个版本不起作用?这是一个错误还是有一些更微妙的data.table工作方式,我错过了?

Rol*_*and 5

I(newName)是一个函数调用.你不能作为LHS的电话=.这不是data.table特有的.

在描述函数评估时,语言定义并未明确说明,但它表示正式参数:

形式为'symbol = expression'的陈述

在您的示例中,我们有:

is.symbol(quote(I(newName)))
#[1] FALSE
is.call(quote(I(newName)))
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

为了说明它在基础R中也不起作用:

foo <- "bar"
list(I(foo) = 1)
Error: unexpected '=' in "list(I(foo) ="
Run Code Online (Sandbox Code Playgroud)

这表明解析器=在调用后并不期望.