Почему all.equal в R не проверяет различия по наблюдениям, когда несоответствие происходит по величине допуска, а не по среднему значению? - PullRequest
0 голосов
/ 18 февраля 2020

all.equal в R-тестах для различий (абсолютных / относительных) для наблюдений, где происходит несоответствие, и затем проверяет, что оно находится в пределах допуска. В идеале, он должен проверять все наблюдения, где несоответствие происходит по величине допуска, а затем сообщать о различиях ... Почему поведение так?

Например, в следующем случае я бы ожидал, что результат all.equal to быть ЛОЖНЫМ, так как первое наблюдение по x не равно y

> x = rep(1, 1000)
> y = rep(1, 1000)
> x = x + 0.001
> y[1] = 2
> print(all.equal(x, y, scale = 1, tolerance=0.01))
[1] TRUE

1 Ответ

0 голосов
/ 18 февраля 2020

Функция all.equal возвращает TRUE, если целевой и текущий аргументы почти равны заданному допуску, значение которого по умолчанию близко к 1.5e-8. Функция не возвращает FALSE в противном случае, скорее она возвращает среднюю относительную (scale=NULL) или абсолютную (scale=1) разницу.

x = rep(1, 1000)
y = rep(1, 1000)
x = x + 0.001
y[1] = 2
print(all.equal(x, y, scale = 1)) # Omit the tolerance
[1] "Mean absolute difference: 0.001998"

mean(abs(x-y))
[1] 0.001998

Если вы прочитали страницу справки для all.equal, вы увидите причину:

tolerance   numeric ≥ 0. Differences smaller than tolerance are not reported.

Редактировать : На основании оценки Аароном источника путаницы ОП, возможно, потребовалась функция any:

y[1] = 1
any(abs(x-y) > 0.01) # Element-wise comparison
[1] FALSE

y[1] = 2
any(abs(x-y) > 0.01)
[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...