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

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

比较这两段代码:

library(data.table)

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

DT[, c('col1', 'col2') := tstrsplit(col, '_')]

这会产生以下错误:

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

输出:

     col col1 col2
1:     a    a    a
2:   a_b    a    b
3: a_b_c    a    b

以上是当返回值多于要分配的列数时,为什么data.table`:=`在有或没有`by`的情况下工作方式不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>