Функция, которая выбирает «ближайшие элементы» в векторе / списке - PullRequest
0 голосов
/ 27 апреля 2018

Допустим, у меня есть вектор из 10 чисел, т.е. a<-(1:10)

Мне нужна функция, в которой я могу дать индекс, а затем он возвращает 4 "ближайших" элемента. В этом случае: 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 голосов
/ 27 апреля 2018

Естественный способ сделать это с модульной арифметикой. Это тот случай, когда индексирование на основе 1 в R слегка раздражает. Лучше всего вычесть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...