当返回值多于要分配的列数时,为什么 data.table `:=` 在有或没有 `by` 的情况下工作方式不同?

pie*_*ito 6 r data.table

这是这个问题的后续问题为什么用 := 和 tstrsplit 创建的新列在有或没有 `by` 参数的情况下是不同的?.

比较这两段代码:

library(data.table)

DT <- data.table(col = c('a', 'a_b', 'a_b_c'))

DT[, c('col1', 'col2') := tstrsplit(col, '_')]
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

Error in '[.data.table'(DT, , ':='(c("col1", "col2"), tstrsplit(col, "_"))) : Supplied 2 columns to be assigned 3 items. Please see NEWS for v1.12.2.

我完全理解的错误。但是,我不明白为什么下一段代码不会产生错误:

library(data.table)

DT <- data.table(col = c('a', 'a_b', 'a_b_c'))

DT[, c('col1', 'col2') := tstrsplit(col, '_'), by = .(col)]
DT
Run Code Online (Sandbox Code Playgroud)

输出:

     col col1 col2
1:     a    a    a
2:   a_b    a    b
3: a_b_c    a    b
Run Code Online (Sandbox Code Playgroud)