2015-07-20 40 views
1

我在R中有一個唯一整數的有序向量,我想查找最接近但小於或等於某個值的元素的索引。例如,對於向量4 8 15 16 23 42和搜索值17,我希望函數返回4,索引16。在Python中,我會使用 bisect模塊。 R中有類似的東西嗎?在R排序向量中查找值的索引

+0

也許http://stackoverflow.com/questions/20133344/find-closest-value-in-a-vector-with-binary-search – jenesaisquoi

+1

使用data.table包中的滾動連接,'data.table(x ,key =「x」)[。(16),roll = -Inf,which = TRUE]' – Arun

+0

'findInterval(17,x)' – Khashaa

回答

3

您可以使用binsearchgtools包拿到二進制搜索的日誌(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