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. is.all.equal should be used for programming, typically in if expressions. It is a simple wrapper using identical as shown in the documentation there.

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.0 Index]