遇到我认为是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工作方式,我错过了?
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)
这表明解析器=在调用后并不期望.