all.equal {base} | R Documentation

## Test if Two Objects are (Nearly) Equal

### Description

`all.equal(x,y)` is a utility to compare R objects `x` and `y` testing “near equality”. If they are different, comparison is still made to some extent, and a report of the differences is returned. Don't use `all.equal` directly in `if` expressions—either use `isTRUE(all.equal(....))` or `identical` if appropriate.

### Usage

    all.equal(target, current, ...)

    ## S3 method for class 'numeric':
    all.equal(target, current,
              tolerance = .Machine$double.eps ^ 0.5,
              scale = NULL, ...)

    attr.all.equal(target, current, ...)

### Arguments

`target` | R object.
`current` | other R object, to be compared with `target`.
`...` | Further arguments for different methods, notably the following two, for numerical comparison:
`tolerance` | numeric >= 0. Differences smaller than `tolerance` are not considered.
`scale` | numeric scalar > 0 (or `NULL`). See Details.

### Details

There are several methods available, most of which are dispatched by the default method, see `methods("all.equal")`. `all.equal.list` and `all.equal.language` provide comparison of recursive objects.

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.

If `scale` is positive, absolute comparisons are after scaling (dividing) by `scale`.

For complex arguments, the modulus `Mod` of the difference is used: `all.numeric.numeric` is called so arguments `tolerance` and `scale` are available.

`attr.all.equal` is used for comparing `attributes`, returning `NULL` or `character`.

### Value

Either `TRUE` or a vector of `mode` `"character"` describing the differences between `target` and `current`.
Numerical differences are reported by relative error.

### References

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer (for `=`).

### See Also

`identical`, `isTRUE`, `==`, and `all` for exact equality testing.

### Examples

    all.equal(pi, 355/113) # not precise enough (default tol) > relative error

    d45 <- pi*(1/4 + 1:10)
    stopifnot(
    all.equal(tan(d45), rep(1,10)))        # TRUE, but
    all      (tan(d45) == rep(1,10))       # FALSE, since not exactly
    all.equal(tan(d45), rep(1,10), tol=0)  # to see difference

    all.equal(options(), .Options)           # no
    all.equal(options(), as.list(.Options))  # TRUE
    .Options $ myopt <- TRUE
       all.equal(options(), as.list(.Options)) #-> "see" the difference
    isTRUE(all.equal(options(), as.list(.Options))) # FALSE
    rm(.Options)

[Package base version 2.1.1 Index]