Кажется, есть небольшая разница между назначением 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
Это основное изменение того, как я изначально задавал этот вопрос.
X[Y, on=, col]
, а неX[Y, on=][, col]
, поскольку последний создает объединение для всех столбцов перед выбором одного необходимого столбца. - person Frank   schedule 19.05.2017LHS := RHS
для удобства можно писать его безlist
. В документе говорится, что до тех пор, пока j возвращает список, каждый элемент списка становится столбцом в итоговой таблице data.table. Это расширенный режим по умолчанию. ... но я не уверен, что здесь имеется в виду под расширенным режимом. - person Frank   schedule 24.05.2017