Rev 15163 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{all.equal}\title{Test if Two Objects are (Nearly) Equal}\alias{all.equal}\alias{all.equal.default}\alias{all.equal.numeric}\alias{all.equal.character}\alias{all.equal.factor}\alias{all.equal.formula}\alias{all.equal.list}\alias{all.equal.language}\alias{attr.all.equal}\usage{all.equal(target, current, \dots)all.equal.numeric(target, current,tolerance= .Machine$double.eps ^ 0.5, scale=NULL)}\arguments{\item{target}{\R object.}\item{current}{other \R object, to be compared with \code{target}.}\item{\dots}{Further arguments for different methods, notably thefollowing two, for numerical comparison:}\item{tolerance}{numeric \eqn{\ge}{>=} 0. Differences smaller than\code{tolerance} are not considered.}\item{scale}{numeric scalar > 0 (or \code{NULL}). See Details.}}\description{\code{all.equal(x,y)} is a utility to compare \R objects \code{x}and \code{y} testing ``near equality''. If they are different,comparison is still made to some extent, and a report of thedifferences is returned. Don't use \code{all.equal} directly in\code{if} expressions---either use \code{\link{identical}} or combinethe two, as shown in the documentation for \code{identical}.}\details{There are several methods available, most of which are dispatched bythe default method, see \code{\link{methods}("all.equal")}.\code{all.equal.list} and \code{all.equal.language} providecomparison of recursive objects.Numerical comparisons for \code{scale = NULL} (the default) are doneby first computing the mean absolute difference of the two numericalvectors. If this is smaller than \code{tolerance} or not finite,absolute differences are used, otherwise relative differences scaledby the mean absolute difference.If \code{scale} is positive, comparisons are after scaling by \code{scale}.For complex arguments, \code{\link{Mod}} of difference is used.\code{attr.all.equal} is used for comparing\code{\link{attributes}}, returning \code{NULL} or \code{character}.}\value{Either \code{TRUE} or a vector of \code{\link{mode}}\code{"character"} describing the differences between \code{target}and \code{current}.Numerical differences are reported by relative error}\seealso{\code{\link{==}}, and \code{\link{all}} for exact equality testing.}\examples{all.equal(pi, 355/113) # not precise enough (default tol) > relative errorstopifnot(all.equal(gamma(2:14), cumprod(1:13))) # TRUE, butall (gamma(2:14) == cumprod(1:13)) # FALSE, since not exactlyall.equal(gamma(2:14), cumprod(1:13), tol=0) # to see differenceall.equal(options(), .Options)all.equal(options(), as.list(.Options))# TRUE.Options $ myopt <- TRUEall.equal(options(), as.list(.Options))rm(.Options)}\keyword{utilities}\keyword{logic}\keyword{arith}