rcomparisonequalitybuilt-infloating-point-comparison

What's the difference between identical(x, y) and isTRUE(all.equal(x, y))?


Is there any difference between testing isTRUE(all.equal(x, y)) and identical(x, y)?

The help page says:

Don't use 'all.equal' directly in 'if' expressions — either use 'isTRUE(all.equal(....))' or 'identical' if appropriate.

but that "if appropriate" leaves me in doubt. How do I decide which of the two is appropriate?


Solution

  • all.equal tests for near equality, while identical is more exact (e.g. it has no tolerance for differences, and it compares storage type). From ?identical:

    The function ‘all.equal’ is also sometimes used to test equality this way, but was intended for something different: it allows for small differences in numeric results.

    And one reason you would wrap all.equal in isTRUE is because all.equal will report differences rather than simply return FALSE.