R 提取向量中与索引最近的相邻索引
我有一个长度为R 提取向量中与索引最近的相邻索引,r,vectorization,R,Vectorization,我有一个长度为N的向量,在该向量中有一个随机索引ind。 我想以最对称的方式提取11个最接近的索引,以最有效的方式ind,例如不超过原始向量的长度,也不获得负索引 示例: 如果N=200,并且ind=199,我想提取190:200 如果ind=3,则结果应为1:11 如果ind=195,则结果应为190:200 如果,我可以用完成,但效率似乎很低: ff = function(ind, N){ vv = sapply(ind, function(x) c((x-5):(x+5))) if
N
的向量,在该向量中有一个随机索引ind
。
我想以最对称的方式提取11个最接近的索引,以最有效的方式ind
,例如不超过原始向量的长度,也不获得负索引
示例:
如果N=200
,并且ind=199
,我想提取190:200
如果ind=3
,则结果应为1:11
如果ind=195
,则结果应为190:200
如果,我可以用完成,但效率似乎很低:
ff = function(ind, N){
vv = sapply(ind, function(x) c((x-5):(x+5)))
if (max(vv) > N) {
vv = vv - max(vv) + N
} else if (min(vv) < 6) {
vv = vv - min(vv) + 1
}
return(vv)
}
ff=函数(ind,N){
vv=sapply(ind,函数(x)c((x-5):(x+5)))
如果(最大值(vv)>N){
vv=vv-最大值(vv)+N
}否则,如果(最小值(vv)<6){
vv=vv-最小值(vv)+1
}
返回(vv)
}
是否有更有效的方法(例如子集)来实现这一点?以下是一些方法:
1)使用order
sort(head(order(abs(1:N - ind)), 11L))
2)对指数和ind
之间的绝对差值进行排序,然后取前11个位置
sort((1:N)[as.integer(names(head(sort(abs(setNames(1:N, 1:N) - ind)), 11L)))])
3)使用基数排序:
sort(head(sort(abs(1:N - ind), index.return=TRUE)$ix, 11L))
以下是一些方法:
1)使用order
sort(head(order(abs(1:N - ind)), 11L))
2)对指数和ind
之间的绝对差值进行排序,然后取前11个位置
sort((1:N)[as.integer(names(head(sort(abs(setNames(1:N, 1:N) - ind)), 11L)))])
3)使用基数排序:
sort(head(sort(abs(1:N - ind), index.return=TRUE)$ix, 11L))