gpt4 book ai didi

r - data.table 结果在向量扫描和二分查找丢失数据之间有所不同

转载 作者:行者123 更新时间:2023-12-04 10:14:16 24 4
gpt4 key购买 nike

这是来自data.table介绍中的例子。看
http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf

示例继续说明二分搜索比向量扫描更快,并且产生完全相同的结果(参见第 5 页)。所以这是我的例子:

library(data.table)
grpsize = ceiling(10000/26^2)
DF <- data.frame(x=rep(LETTERS,each=26*grpsize), y=rep(letters,each=grpsize),v=runif(grpsize*26^2), stringsAsFactors=FALSE)
DT = data.table(DF)
setkey(DT,x,y)

DT[x=='R' & y=='h']
DT[J("R","h")]

正如预期的那样,这将返回完全相同的结果。一个扫描每一行,另一个是二进制搜索。但是,当存在不存在的行时,结果会有所不同。请参阅以下代码:
DT[x=='R' & y=='H']
DT[J("R","H")]

我得到以下结果
# > DT[x=='R' & y=='H', ]
# Empty data.table (0 rows) of 3 cols: x,y,v

# > DT[J("R","H")]
# x y v
# 1: R H NA

a.) 为什么会这样?

b.) 有没有办法改变二分搜索的行为,使其不返回不存在的行的结果?

最佳答案

我想 J 不仅仅是一个二分搜索;这是一个“加入”。对于给出的每个组合键,它必须返回一些东西。要关闭它:

DT[J('R','H'),nomatch=0]

关于r - data.table 结果在向量扫描和二分查找丢失数据之间有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com