标准中的 data.tabel 通过引用 := 赋值与函数形式之间似乎存在细微差别。
标准形式将 RHS 强制为向量,而函数形式则不然。
一个细节,但我认为没有记录。
library(data.table)
dt <- data.table(a = c('a','b','c'))
v <- c('A','B','C')
l <- list(v)
all.equal(copy(dt)[, new := v], copy(dt)[, `:=` (new = v)])
# [1] TRUE
all.equal(copy(dt)[, new := l], copy(dt)[, `:=` (new = l)])
# [1] "Datasets have different column modes. First 3: new(character!=list)"
copy(dt)[, new := l][]
# a new
# 1: a A
# 2: b B
# 3: c C
copy(dt)[, `:=` (new = l)][]
# a new
# 1: a A,B,C
# 2: b A,B,C
# 3: c A,B,C
这是我最初提出这个问题的主要编辑。