1
我在R中有一個唯一整數的有序向量,我想查找最接近但小於或等於某個值的元素的索引。例如,對於向量4 8 15 16 23 42
和搜索值17
,我希望函數返回4
,索引16
。在Python中,我會使用 bisect模塊。 R中有類似的東西嗎?在R排序向量中查找值的索引
我在R中有一個唯一整數的有序向量,我想查找最接近但小於或等於某個值的元素的索引。例如,對於向量4 8 15 16 23 42
和搜索值17
,我希望函數返回4
,索引16
。在Python中,我會使用 bisect模塊。 R中有類似的東西嗎?在R排序向量中查找值的索引
您可以使用binsearch
從gtools
包拿到二進制搜索的日誌(n)的行爲:
library(gtools)
x <- c(4, 8, 15, 16, 23, 42)
binsearch(function(y) x[y]-17, range=c(1, length(x)))
# $call
# binsearch(fun = function(y) x[y] - 17, range = c(1, length(x)))
#
# $numiter
# [1] 3
#
# $flag
# [1] "Between Elements"
#
# $where
# [1] 4 5
#
# $value
# [1] -1 6
我們可以看到一個更大的示例迭代次數的次線性縮放:
set.seed(144)
x <- sort(runif(1000000))
binsearch(function(y) x[y]-0.5, range=c(1, length(x)))
# $call
# binsearch(fun = function(y) x[y] - 0.5, range = c(1, length(x)))
#
# $numiter
# [1] 21
#
# $flag
# [1] "Between Elements"
#
# $where
# [1] 500577 500578
#
# $value
# [1] -1.990702e-07 5.827751e-07
也許http://stackoverflow.com/questions/20133344/find-closest-value-in-a-vector-with-binary-search – jenesaisquoi
使用data.table包中的滾動連接,'data.table(x ,key =「x」)[。(16),roll = -Inf,which = TRUE]' – Arun
'findInterval(17,x)' – Khashaa