假设我有一个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)
答案 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