选择"最接近元素的功能"在矢量/列表中

时间:2018-04-27 11:21:54

标签: r

假设我有一个10个数字的向量,即a<-(1:10)

我想要一个能给出索引的函数,然后它返回4&#34;最接近的&#34;元素。 在这种情况下: f(4) = c(2,3,5,6) f(2) = c(10,1,3,4)

请注意,原始矢量可以是任何内容,因此如果a <- c(10,2,6,4,7,9,1) f(2) = c(1,10,6,4) f(5) = c(3,4,9,1)

1 个答案:

答案 0 :(得分:3)

这样做的自然方法是使用模运算。在这种情况下,R的基于1的索引有点令人讨厌。最好从索引中减去1,使用模运算来获得您想要的基于0的索引,然后加1以返回到1:

f <- function(v,i){
  m <- length(v)
  j <- i-1
  indices <- 1 + c(j-2,j-1,j+1,j+2) %% m
  v[indices]
}

#test:

a <- c(10,2,6,4,7,9,1)
print(f(a,2))
print(f(a,5))

输出:

[1]  1 10  6  4
[1] 6 4 9 1