Я думаю, что проблема здесь в том, что параметр tolerance
не выполняет то, что вы хотите. Вы надеетесь, что он отметит любые индивидуальные различия, превышающие 0,001, но функция all.equal()
работает, учитывая среднюю относительную разницу доступных записей. То есть он по своей сути сравнивает все в совокупности вместо того, чтобы искать поэлементно.
Если вам нужно поэлементное сравнение, вам лучше просто написать его напрямую, например @ Ben's комментарий all(abs(a-b) < .001)
или, предположительно, того, что делает ваш newFunction()
.
Для дальнейшего удаления sh нюанса all.equal()
:
c <- a / 10
d <- c
d[3, 3, 2] <- 1.81
all.equal(c, d, tolerance = 0.1) # returns TRUE
all.equal(c, d, tolerance = 0.001) # returns the mean relative difference
Разница в последняя строка с соответствующей строкой означает, что средняя относительная разница теперь превышает tolerance
0,001, хотя абсолютные различия между c
и d
идентичны между a
и b
. all.equal()
не только эффективно учитывает различия всех записей одновременно, но и масштабирует их до размеров записей.