R data.table二进制搜索中可能存在错误?

R data.table二进制搜索中可能存在错误?,r,data.table,R,Data.table,我对R中的data.table包有问题 考虑一个简单的数据集: require(data.table) dat <- read.table(text=" x y [1,] -1 99 [2,] 5 4 [3,] 10 -2 [4,] 600 0 [5,] -16 1 [6,] 0 55", header=TRUE) 如果我要查找的密钥实际位于数据集中,则它可以正常工作: DT[J(-16)] x y 1: -16 1 但如果我要的密钥不是数据的

我对R中的data.table包有问题

考虑一个简单的数据集:

require(data.table)
dat <- read.table(text="       x  y
[1,]  -1 99
[2,]   5  4
[3,]  10 -2
[4,] 600  0
[5,] -16  1
[6,]   0 55", header=TRUE)
如果我要查找的密钥实际位于数据集中,则它可以正常工作:

DT[J(-16)]
     x y
1: -16 1
但如果我要的密钥不是数据的一部分:

> DT[J(-22)]
     x  y
1: -22 NA
DTpharm[J(154759)]
   studyid RXSUP RXAMT RXMD                 NDC              GPI_CD class date
1:  154759    NA    NA   NA 9218868437227407266 9218868437227407266    NA <NA>
当我在寻找与此处相同的结果时:

> DT[x==-22]
Empty data.table (0 rows) of 2 cols: x,y
这是一个简单的示例,但它返回一个长度为1的实际数据集,如果我想进一步处理该结果(在循环中,有时可能会创建空子集),这将非常繁琐

此外,如果有许多列,它似乎用几乎随机的数据填充其中一些列,以及NA,这就是我在实际数据中看到的:

我有一个包含大量变量的数据集,关键是studyid。我要求studyid提供不属于数据的子集:

> DT[J(-22)]
     x  y
1: -22 NA
DTpharm[J(154759)]
   studyid RXSUP RXAMT RXMD                 NDC              GPI_CD class date
1:  154759    NA    NA   NA 9218868437227407266 9218868437227407266    NA <NA>
DTpharm[J(154759)]
studyid RXSUP RXAMT RXMD NDC GPI_CD课程日期
1:154759 NA NA 9218868437227407266 9218868437227407266 NA
其中,NDC和GPI变量为整数64。(注意这些值是如何相同的?!)


我遗漏了什么吗/你知道一种方法吗?如果我要求一个不存在的密钥,那么会返回一个空集的二进制搜索?

不,这是故意的。如果您不希望返回结果,请使用
nomatch=0
,如
帮助(“[.data.table”)
中所述。使用
J
的联接不同于子集。但不确定integer64会发生什么奇怪的事情。哦,这就解决了,谢谢!当我添加时,nomatch=0在所有情况下都能正常工作。谢谢,并尝试使用require(bit64)然后两个integer64列应显示NA。
fread
将发出警告,要求您要求(位64)。也许我们也需要在print方法中添加警告。是的,更新为在print方法中添加警告。虽然原始帖子没有提到它,但我确实加载了bit64,它仍然错误地打印了两列。不,这是出于设计。使用
nomatch=0
,如
帮助([.data.table])中所述
如果不希望返回结果。与
J
的连接不同于子集设置。但不确定integer64会发生什么奇怪的事情。哦,这就解决了,谢谢!当我添加nomatch=0时,它在所有情况下都能正常工作。谢谢,请尝试require(位64)然后两个integer64列应显示NA。
fread
将发出警告,要求您要求(位64)。也许我们也需要在print方法中添加警告。是的,更新为在print方法中添加警告。虽然原始帖子没有提到它,但我确实加载了bit64,它仍然错误地打印了两列。