在R中的排序向量中查找值的索引

时间:2015-07-20 21:14:25

标签: r indexof

我在R中有一个唯一整数的有序向量,我想找到最接近但小于或等于某个值的元素的索引。例如,对于向量4 8 15 16 23 42和搜索值17,我希望函数返回4,索引为16。在Python中,我会使用 bisect模块。 R中有类似的东西吗?

2 个答案:

答案 0 :(得分:3)

您可以使用var re = /\d+[+]\d+/ result = window.eval(command); var bool = re.test(result); 包中的binsearch来获取二进制搜索的log(n)行为:

gtools

我们可以看到迭代次数的次线性缩放,有一个更大的例子:

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

答案 1 :(得分:1)

Base R提供了findInterval,它实现了二进制搜索:

findInterval(17, c(4, 8, 15, 16, 23, 42))

@Khashaa已经在评论中提到了这一点。