У меня есть вектор длины N
и случайный индекс ind
в этом векторе.Я хотел бы извлечь 11 ближайших индексов самым симметричным из возможных способов до ind
наиболее эффективным способом, например, чтобы не превышать длину исходного вектора, а также не получить отрицательные индексы.
Примеры:
, если N = 200
, и ind = 199
, я хотел бы извлечь 190: 200.
, если ind = 3
, результат должен быть 1: 11.
если ind = 195
, результат должен быть 190: 200.
Я могу сделать это с if
, но, похоже, неэффективно:
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)
}
Есть ли ещеэффективный способ (например, подмножество), чтобы сделать это?