Сравнение каждого значения в векторе со всеми другими значениями на основе критериев - PullRequest
0 голосов
/ 14 мая 2018

У меня есть вектор уникальных значений, но я хочу получить только те, которые соответствуют определенным критериям, хотя бы с одним другим значением.Например, если у меня есть такой вектор

v <- c(1,2,5,6,8,10,15,16)

И критерии, которым я хочу соответствовать, - это все значения, которые имеют хотя бы одно другое значение в векторе с разницей 1 между ними, результатбудет

1,2,5,6,15,16

Я хочу быть в состоянии сделать это с различными функциями.Итак, для этого примера давайте предположим, что я использую функцию, которая дает мне абсолютную разницу между двумя заданными числами:

AbsDiff <- function(x,y){
           abs(x-y)
           }

Таким образом, решение должно запустить функцию AbsDiff для каждого значения со всеми другими значениями, и получитьжелаемый результат.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Не так хорошо, как решение @docendo,

v <- c(1,2,5,6,8,10,15,16)
x <- vector()
for(i in v){

  if((i+1) %in% v){
    x[length(x)+1] = i
    x[length(x)+1] = i+1
  }
}

x
0 голосов
/ 14 мая 2018

Вот немного измененная версия вашей функции:

m <- outer(v, v, FUN = function(x,y) abs(x-y) == 1)
v[colSums(m) > 0]
# [1]  1  2  5  6 15 16

Как видите, я добавил в вашу функцию логическую проверку, которая имеет значение ИСТИНА, если абсолютная разница между двумя значениями равна ровно 1. Это облегчает последующее извлечение соответствующих индексов.


Если вы хотите использовать вашу функцию такой, какая она есть сейчас, вы можете сделать это так:

m <- outer(v, v, FUN = AbsDiff)
v[colSums(m == 1) > 0]

Это означает, что мы делаем проверку для == 1 на втором шаге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...