我仍然对data.table J.的行为感到困惑.
> DT = data.table(A=7:3,B=letters[5:1])
> DT
A B
1: 7 e
2: 6 d
3: 5 c
4: 4 b
5: 3 a
> setkey(DT, A, B)
> DT[J(7,"e")]
A B
1: 7 e
> DT[J(7,"f")]
A B
1: 7 f # <- there is no such line in DT
Run Code Online (Sandbox Code Playgroud)
但DT中没有这样的界限.为什么我们得到这个结果?
data.table J(7, 'f')实际上是一行data.table,您可以加入自己的行data.table.当你打电话时x[i],你正在查看每一行,i并找到所有匹配x.默认情况下,NA为其中的行提供i不匹配的内容,通过向其添加另一列更容易看出DT:
DT <- data.table(A=7:3,B=letters[5:1],C=letters[1:5])
setkey(DT, A, B)
DT[J(7,"f")]
# A B C
# 1: 7 f NA
Run Code Online (Sandbox Code Playgroud)
你所看到的是唯一一条J与之无关的东西DT.为防止data.table报告不匹配,您可以使用nomatch=0
DT[J(7,"f"), nomatch=0]
# Empty data.table (0 rows) of 3 cols: A,B,C
Run Code Online (Sandbox Code Playgroud)