R 在data.table';中不匹配:';没有正确更新

R 在data.table';中不匹配:';没有正确更新,r,data.table,R,Data.table,我在R3.1.2平台上使用表1.9.4中的数据:x86_64-pc-linux-gnu(64位)。“:=”功能中的nomatch参数似乎不起作用。下面是示例代码 library(data.table) options(datatable.nomatch=0) dt1 = data.table( a=c(rep(1, 2), rep(2, 2), 3), b=c(1:2, 1:2,1), c=101:105) setkey(dt1, a, b) dt

我在R3.1.2平台上使用表1.9.4中的数据:x86_64-pc-linux-gnu(64位)。“:=”功能中的nomatch参数似乎不起作用。下面是示例代码

library(data.table)
options(datatable.nomatch=0)
dt1 = data.table(
        a=c(rep(1, 2), rep(2, 2), 3),
        b=c(1:2, 1:2,1),
        c=101:105)
setkey(dt1, a, b)
dt1

dtw = data.table(a=c(1,3), w1=c(201, 203), w2=c(301,303))
setkey(dtw, a)
dtw

dt1[dtw, ':='(w1=i.w1, w2=i.w2)]
dt1
它返回w1和w2列中的NA,而不是0

   a b   c  w1  w2
1: 1 1 101 201 301
2: 1 2 102 201 301
3: 2 1 103  NA  NA
4: 2 2 104  NA  NA
5: 3 1 105 203 303
正确的输出应该是

   a b   c  w1  w2
1: 1 1 101 201 301
2: 1 2 102 201 301
3: 2 1 103   0   0
4: 2 2 104   0   0
5: 3 1 105 203 303

我做错了什么?我如何得到0来代替NA?

如评论中所述,您当前被误解的
nomatch
行为,
nomatch=0
没有填充
0

不确定nomatch是否会影响
:=
。它用于不带
的联接:=
以指示它应该是内部联接还是外部联接。
请注意,nomatch的行为可能会在2.0.0中发生变化,这是一个相当遥远的未来,因为从现在起它将是4个稳定的版本。

作为参考,离开当前关于该更改的讨论。

“当'i'中的一行与'x'的键不匹配时,
nomatch
起作用。在
dt1[dtw]
-作为
x[i]
-的情况下,
dtw
('i')中的所有键都在
dt1
('x')中。因此,
nomatch
甚至都没有效果。另外,
nomatch=0
并不意味着返回0,它意味着“对于‘i’的那一行,不会返回任何行。”试试
dtw[dt1,nomatch=NA]
dtw[dt1,nomatch=0]
相比,尽管thela是对的,但这仍然是一个很好的问题,我同意
nomatch=0
可能会产生误导。很好的问题,很好的例子。@TheLate Mail:对不起,我不在,所以不能回来了。dtw(“i”)只有2个键(1,3),而dt1(“x”)有3个键(1,2,3)。我想要的是为dtw中相应的键更新dt1中的行,如果dtw中没有相应的dt1键,则返回0作为列值。