Как установить предел погрешности для условного оператора all - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь создать условный оператор, который проверяет, все ли определенные значения присутствуют в другом векторе, но я хотел бы изменить условный так, чтобы был предел погрешности, удовлетворяющий некоторым отклонениям от условного (я пытаюсь чтобы избежать плавающих точек). Вот пример

x1= 2.595

x2= 4.231

x3=3.236

x= c(2.592,3.64,3.235, 5.33,4.229)

if(all(c(x1,x2,x3) %in% x)){print("pls help")}

Любые идеи о том, как я мог бы изменить вышеупомянутое условное утверждение, чтобы оставить некоторую свободу? Так что x1,x2,x3 не должно быть точно равно любому из значений в x, чтобы условное условие было истинным?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Используя тот же подход допуска, вы можете определить пользовательскую %in% -подобную функцию со встроенным допуском:

`%in_tol%` <- function(x, y, tol = .005) colSums(abs(sapply(x,`-`, y)) <= tol) > 0

y <- c(2.595, 4.231, 3.236)
x <- c(2.592, 3.64, 3.235, 5.33, 4.229)

y %in_tol% x
[1] TRUE TRUE TRUE

или с уменьшенным допуском:

`%in_tol%`(y, x, tol = .002)
[1] FALSE  TRUE  TRUE
1 голос
/ 02 апреля 2020

Вы можете определить threshold, построить верхний и нижний предел и сравнить с этими значениями.

threshold <- 0.05
lower_limit <- x - threshold
upper_limit <- x + threshold

all(sapply(c(x1, x2, x3), function(y) any(y >= lower_limit & y <= upper_limit)))
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...