将多个列添加到data.table的子集中:=

Flo*_*ald 15 r data.table

我的问题是对此前回答的问题的扩展:

在一个函数调用中向R data.table添加多个列?

如果data.table有一个根据I子集的密钥,我在分配多个新列时遇到问题.例:

library(data.table)
example(data.table)
DT[J("a")]
   x y  v  m
1: a 1 42 42
2: a 3 42 42
3: a 6 42 42
Run Code Online (Sandbox Code Playgroud)

即DT有一个key(DT) = c("x", "y"),我要指派2个新栏目new1,并new2在一个呼叫,与上述类似的解决方案.我这样做:

DT[J("a"),c("new1","new2") := list(c(1,2,3),c(3,2,1)),with=FALSE]
Run Code Online (Sandbox Code Playgroud)

但我明白了

   x y  v  m new1
1: a 1 42 42    1
2: a 3 42 42    2
3: a 6 42 42    3
4: b 1  4  5   NA
5: b 3  5  5   NA
6: b 6  6  5   NA
7: c 1  7  8   NA
8: c 3  8  8   NA
9: c 6  9  8   NA
Run Code Online (Sandbox Code Playgroud)

即行为符合预期(将值赋值给x == a,NA其他),但仅限于第一列.这是我的错误还是错误?

请注意,如果没有DT的子集,这可以完美地工作:

DT[,c("new1","new2") := list(c(1,2,3),c(3,2,1)),with=FALSE]
   x y  v  m new1 new2
1: a 1 42 42    1    3
2: a 3 42 42    2    2
3: a 6 42 42    3    1
4: b 1  4  5    1    3
5: b 3  5  5    2    2
6: b 6  6  5    3    1
7: c 1  7  8    1    3
8: c 3  8  8    2    2
9: c 6  9  8    3    1
Run Code Online (Sandbox Code Playgroud)

Mat*_*wle 9

很好地发现:这是一个新的错误.请提交一份bug.report(package="data.table").

谢谢.

===

现已修复于v1.8.3.Bug#2215最新消息.