Если вы хотите обработать случаи, когда в матрице есть нули (что в противном случае приводит к делению на ноль), у этого ответа есть несколько решений: Вы переназначаете == и! = На isTRUE (all.equal ())?
Небольшое изменение предложенной мной функции almostEqual
даст:
relativeError <- function(x, y, tolerance=1e-8) {
diff <- abs(x - y)
mag <- pmax( abs(x), abs(y) )
ifelse( mag > tolerance, diff/mag, diff)
}
m1 <- cbind(c(0,1), c(1,1))
m2 <- cbind(c(0,1), c(1,1.11))
any(relativeError(m1, m2) > 0.01) # TRUE
# Building on @DWin's answer:
which(relativeError(m1, m2) > 0.01, arr.ind=TRUE) # 2 2
Обратите внимание, что это вычисляет относительную ошибку немного по-другому, чем ваше определение: этосимметричный и обрабатывает небольшие значения - и это немного медленнее из-за этого ...