我有一个integer64
索引data.table
对象:
library(data.table)
library(bit64)
some_data = as.integer64(c(1514772184120000026, 1514772184120000068, 1514772184120000042, 1514772184120000078,1514772184120000011, 1514772184120000043, 1514772184120000094, 1514772184120000085,
1514772184120000083, 1514772184120000017, 1514772184120000013, 1514772184120000060, 1514772184120000032, 1514772184120000059, 1514772184120000029))
#
n <- 10
x <- setDT(data.frame(a = runif(n)))
x[, new_col := some_data[1:n]]
setorder(x, new_col)
然后,我需要在原始对象 ( )integer64
的索引中进行二分搜索:data.table
x
search_values <- some_data[(n+1):length(some_data)]
如果这些本地整数可以findInterval()
用来解决问题:
values_index <- findInterval(search_values, x$new_col)
但是当参数findInterval
是时integer64
,我得到:
Warning messages:
1: In as.double.integer64(vec) :
integer precision lost while converting to double
2: In as.double.integer64(x) :
integer precision lost while converting to double
和错误的索引:
> values_index
[1] 10 10 10 10 10
例如, 的条目search_values
都大于 的所有条目是不正确的x$new_col
。
编辑:
期望的输出:
print(values_index)
9 10 6 10 1
为什么?:
value_index
具有与 一样多的条目search_values
。对于 的每个条目search_values
, 中的相应条目value_index
给出了该条目search_values
如果插入其中时的排名x$new_col
。所以第一个条目value_index
是9
因为search_values
( ) 的第一个条目将在 的条目中1514772184120000045
排名。9
x$new_col