R 对联接的data.table子集的计算抛出警告,但结果是否正确?
我想从表R 对联接的data.table子集的计算抛出警告,但结果是否正确?,r,join,data.table,R,Join,Data.table,我想从表dt中的匹配行中减去dt\u false表中的值。结果是正确的,尽管我想知道为什么会出现警告 library(data.table) dt <- data.table(id = letters[1:15], value = 1:15, key = "id") dt_false <- data.table(id = letters[6:20], v
dt
中的匹配行中减去dt\u false
表中的值。结果是正确的,尽管我想知道为什么会出现警告
library(data.table)
dt <- data.table(id = letters[1:15],
value = 1:15,
key = "id")
dt_false <- data.table(id = letters[6:20],
value = 6:20,
key = "id")
# matching subset
dt[dt_false, nomatch=0]
# use nomatch = 0 to include only the matches
# use i.v1 to reference v1 from the i component
dt[dt_false, nomatch=0, value := value - i.value, ]
Warning message:
In `[.data.table`(dt, dt_false, `:=`(value, value - i.value), nomatch = 0) :
Supplied 10 items to be assigned to 15 items of column 'value' (recycled leaving remainder of 5 items).
库(data.table)
dt删除nomatch=0
参数,因为所有不匹配的内容都不会被更新。只需执行dt[dt_false,value:=value-i.value]
在我看来,您的预期行为(毫无怨言地分配到所选子集)就是应该发生的。如果您使用6:30
而不是6:20
,则该警告更容易解析,在这种情况下,它会显示“提供10个项目以分配给25个项目”,这听起来像是分配给dt_false
(其中有25个项目)…奇怪。也许这就像大卫说的那样,合并赋值应该是普通的,DT1[DT2,var:=stuff]
(没有nomatch
)。@DavidArenburg把你的评论作为答案,这样问题就可以解决了。@jangorecki我还没有调查nomatch
为什么会有这种效果,因此也没有发布答案。因为这才是真正的问题。