Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 提取向量中与索引最近的相邻索引_R_Vectorization - Fatal编程技术网

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))