Arrays 查找元素索引的快速方法

Arrays 查找元素索引的快速方法,arrays,r,vector,Arrays,R,Vector,我有一个酉段[0,1]和它上面的几个点,由向量v表示。此外,我有一个介于0和1之间的数字k,我想知道这个数字所处区间的索引是什么。 我想知道是否存在一种聪明的方式,而不是骑自行车的元素 k <- 0.67 v <- c( 0.12 , 0.25 , 0.48 , 0.78 , 1) k一种方法如下: 间隔是向量v(n)长度的n-1。因此,考虑到这一点,您可以使用Position,它返回第一次出现的函数(x)0.67

我有一个酉段[0,1]和它上面的几个点,由向量
v
表示。此外,我有一个介于0和1之间的数字
k
,我想知道这个数字所处区间的索引是什么。 我想知道是否存在一种聪明的方式,而不是骑自行车的元素

k <- 0.67 
v <- c( 0.12 , 0.25 , 0.48 , 0.78 , 1)

k一种方法如下:

间隔是向量v(n)长度的n-1。因此,考虑到这一点,您可以使用
Position
,它返回第一次出现的
函数(x)0.67

#sort helps in case v is not sorted
Position(function(x) 0.67 < sort(x), v) - 1
[1] 3
#在v未排序的情况下排序有助于
位置(功能(x)0.67<排序(x),v)-1
[1] 3

上面出现的位置是4,间隔是第三个。

可能是这样的:
c(max(which(vk))
我一直在做一些非常类似的事情,只是会舍入到向量中最接近的值,而不是返回索引。我一直在用Rcpp编写C++脚本。下面我对上面的三个解决方案以及我编写的cpp脚本进行了基准测试,该脚本返回值而不是索引,但很容易修改<如果不计算cpp代码,code>findInterval
似乎是迄今为止最快的:

库(Rcpp)
cppFunction('NumericVector最近邻(NumericVector x,NumericVector v){
int n,m,i,j,k,adj;
n=v.大小();
m=x.尺寸();
数值向量y(m);
对于(int a=0;a=v[n-1]){
返回v[n-1];
}
i=0;
j=0;
k=n-1;

而(!(v[j]参见
?findInterval