Rev 75435 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/all.equal.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2018 R Core Team% Distributed under GPL 2 or later\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.environment}\alias{all.equal.envRefClass}\alias{all.equal.factor}\alias{all.equal.formula}\alias{all.equal.list}\alias{all.equal.language}\alias{all.equal.POSIXt}\alias{all.equal.raw}\alias{attr.all.equal}\concept{numerical equality}\concept{approximately equal}\concept{equality testing}\usage{all.equal(target, current, \dots)\method{all.equal}{numeric}(target, current,tolerance = sqrt(.Machine$double.eps), scale = NULL,countEQ = FALSE,formatFUN = function(err, what) format(err),\dots, check.attributes = TRUE)\method{all.equal}{list}(target, current, \dots,check.attributes = TRUE, use.names = TRUE)\method{all.equal}{environment}(target, current, all.names=TRUE, \dots)\method{all.equal}{POSIXt}(target, current, \dots, tolerance = 1e-3, scale)attr.all.equal(target, current, \dots,check.attributes = TRUE, check.names = TRUE)}\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 reported. The default value is close to\code{1.5e-8}.}\item{scale}{\code{NULL} or numeric > 0, typically of length 1 or\code{length(target)}. See \sQuote{Details}.}\item{countEQ}{logical indicating if the \code{target == current}cases should be counted when computing the mean (absolute orrelative) differences. The default, \code{FALSE} may seemmisleading in cases where \code{target} and \code{current} onlydiffer in a few places; see the extensive example.}\item{formatFUN}{a \code{\link{function}} of two arguments,\code{err}, the relative, absolute or scaled error, and\code{what}, a character string indicating the \emph{kind} of error;maybe used, e.g., to format relative and absolute errors differently.}\item{check.attributes}{logical indicating if the\code{\link{attributes}} of \code{target} and \code{current}(other than the names) should be compared.}\item{use.names}{logical indicating if \code{\link{list}} comparisonshould report differing components by name (if matching) instead ofinteger index. Note that this comes after \code{\dots} and so mustbe specified by its full name.}\item{all.names}{logical passed to \code{\link{ls}} indicating if\dQuote{hidden} objects should also be considered in the environments.}\item{check.names}{logical indicating if the \code{\link{names}(.)}of \code{target} and \code{current} should be compared.}}\description{\code{all.equal(x, y)} is a utility to compare \R objects \code{x}and \code{y} testing \sQuote{near equality}. If they are different,comparison is still made to some extent, and a report of thedifferences is returned. Do not use \code{all.equal} directly in\code{if} expressions---either use \code{isTRUE(all.equal(....))} or\code{\link{identical}} if appropriate.}\details{\code{all.equal} is a generic function, dispatching methods on the\code{target} argument. To see the available methods, use\code{\link{methods}("all.equal")}, but note that the default methodalso does some dispatching, e.g.\sspace{}using the raw method for logicaltargets.Remember that arguments which follow \code{\dots} must be specified by(unabbreviated) name. It is inadvisable to pass unnamed arguments in\code{\dots} as these will match different arguments in differentmethods.Numerical comparisons for \code{scale = NULL} (the default) aretypically on \emph{relative difference} scale unless the target valuesare close to zero: First, the mean absolute difference of the twonumerical vectors is computed. If this is smaller than\code{tolerance} or not finite, absolute differences are used,otherwise relative differences scaled by the mean absolute\code{target} value.Note that these comparisons are computed only for those vector elementswhere \code{target} is not \code{\link{NA}} and differs from \code{current}.If \code{countEQ} is true, the equal and \code{NA} cases are\emph{counted} in determining \dQuote{sample} size.If \code{scale} is numeric (and positive), absolute comparisons aremade after scaling (dividing) by \code{scale}.For complex \code{target}, the modulus (\code{\link{Mod}}) of thedifference is used: \code{all.equal.numeric} is called so arguments\code{tolerance} and \code{scale} are available.The \code{\link{list}} method compares components of\code{target} and \code{current} recursively, passing all otherarguments, as long as both are \dQuote{list-like}, i.e., fulfilleither \code{\link{is.vector}} or \code{\link{is.list}}.The \code{\link{environment}} method works via the \code{list} method,and is also used for reference classes (unless a specific\code{all.equal} method is defined).The methods for the date-time classes by default allow a tolerance of\code{tolerance = 0.001} seconds, and ignore \code{scale}.\code{attr.all.equal} is used for comparing\code{\link{attributes}}, returning \code{NULL} or a\code{character} vector.}\value{Either \code{TRUE} (\code{NULL} for \code{attr.all.equal}) or a vectorof \code{\link{mode}} \code{"character"} describing the differencesbetween \code{target} and \code{current}.}\references{Chambers, J. M. (1998)\emph{Programming with Data. A Guide to the S Language}.Springer (for \code{=}).}\seealso{\code{\link{identical}}, \code{\link{isTRUE}}, \code{\link{==}}, and\code{\link{all}} for exact equality testing.}\examples{all.equal(pi, 355/113)# not precise enough (default tol) > relative errord45 <- pi*(1/4 + 1:10)stopifnot(all.equal(tan(d45), rep(1, 10))) # TRUE, butall (tan(d45) == rep(1, 10)) # FALSE, since not exactlyall.equal(tan(d45), rep(1, 10), tolerance = 0) # to see difference## advanced: equality of environmentsae <- all.equal(as.environment("package:stats"),asNamespace("stats"))stopifnot(is.character(ae), length(ae) > 10,## were incorrectly "considered equal" in R <= 3.1.1all.equal(asNamespace("stats"), asNamespace("stats")))## A situation where 'countEQ = TRUE' makes sense:x1 <- x2 <- (1:100)/10; x2[2] <- 1.1*x1[2]## 99 out of 100 pairs (x1[i], x2[i]) are equal:plot(x1,x2, main = "all.equal.numeric() -- not counting equal parts")all.equal(x1,x2) ## "Mean relative difference: 0.1"mtext(paste("all.equal(x1,x2) :", all.equal(x1,x2)), line= -2)##' extract the 'Mean relative difference' as number:all.eqNum <- function(...) as.numeric(sub(".*:", '', all.equal(...)))set.seed(17)## When x2 is jittered, typically all pairs (x1[i],x2[i]) do differ:summary(r <- replicate(100, all.eqNum(x1, x2*(1+rnorm(x1)*1e-7))))mtext(paste("mean(all.equal(x1, x2*(1 + eps_k))) {100 x} Mean rel.diff.=",signif(mean(r), 3)), line = -4, adj=0)## With argument countEQ=TRUE, get "the same" (w/o need for jittering):mtext(paste("all.equal(x1,x2, countEQ=TRUE) :",signif(all.eqNum(x1,x2, countEQ=TRUE), 3)), line= -6, col=2)}\keyword{programming}% is.*\keyword{utilities}\keyword{logic}\keyword{arith}