Đây là từ các ví dụ trong phần giới thiệu data.table. Xem http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdfkết quả dữ liệu có thể khác nhau giữa quét vector và tìm kiếm nhị phân cho dữ liệu bị thiếu
Ví dụ về việc tìm kiếm nhị phân nhanh hơn so với quét vectơ và cho kết quả chính xác giống nhau (xem trang 5). Vì vậy, đây là ví dụ của tôi:
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")]
Như dự kiến điều này sẽ trả về chính xác kết quả tương tự. Một quét mỗi hàng, khác là một tìm kiếm nhị phân. Tuy nhiên, khi có các hàng không tồn tại thì các kết quả khác nhau. Xem đoạn mã sau:
DT[x=='R' & y=='H']
DT[J("R","H")]
tôi nhận được kết quả như sau
# > 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) Tại sao đây là trường hợp.?
b.) Có cách nào để thay đổi hành vi tìm kiếm nhị phân không trả lại kết quả của các hàng không tồn tại không?
Tôi đoán 'J' không chỉ là tìm kiếm nhị phân; đó là "tham gia". Đối với mỗi tổ hợp phím nó được đưa ra, nó phải trả lại một cái gì đó. Để tắt nó: 'DT [J ('R', 'H'), nomatch = 0]' – Frank
@Frank, bạn nên làm cho câu trả lời đó. – Arun