Si desea manejar los casos en que la matriz tiene ceros en el mismo (que de otro modo conduce a la división por cero), esta respuesta tiene algunas soluciones: Do you reassign == and != to isTRUE(all.equal())?
Una ligera modificación de la función almostEqual
me sugirió que habría Rendimiento:
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
Tenga en cuenta que este calcula el error relativo ligeramente diferente a su definición: es simétrica y se ocupa de los valores pequeños - y es un poco más lento a causa de ella. ..
Buen trabajo. Nos acercamos a una respuesta a prueba de balas, pero flexible. –