Dear all, The documentation for `all.equal.numeric` says
Numerical comparisons for ‘scale = NULL’ (the default) are done by first computing the mean absolute difference of the two numerical vectors. If this is smaller than ‘tolerance’ or not finite, absolute differences are used, otherwise relative differences scaled by the mean absolute difference. But the actual behaviour of the function is to use relative differences if the mean value of the first argument is greater than `tolerance`: all.equal(0.1, 0.102, tolerance=0.01) # [1] "Mean relative difference: 0.02" It seems to me that this example should produce `TRUE`, because abs(0.1-0.102) < 0.01, but it does not, because abs(0.1) > 0.01. The relevant section in the source seems to be what <- if (is.null(scale)) { xn <- mean(abs(target)) if (is.finite(xn) && xn > tolerance) { xy <- xy/xn "relative" } else "absolute" } I think `xy`, not `xn`, should be tested here. The last line of the documentation, indicating that relative differences are "scaled by the mean absolute difference" also seems not to match the code, but in this aspect the code is surely right, i.e., the relative difference is relative to the mean value, not the mean difference. All the best, Jon ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel