当返回值多于要分配的列数时,为什么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
THE END
二维码