Examples for 'base::all.equal'


Test if Two Objects are (Nearly) Equal

Aliases: all.equal all.equal.default all.equal.numeric all.equal.character all.equal.environment all.equal.envRefClass all.equal.factor all.equal.formula all.equal.function all.equal.list all.equal.language all.equal.POSIXt all.equal.raw attr.all.equal

Keywords: programming utilities logic arith

### ** Examples

all.equal(pi, 355/113)
[1] "Mean relative difference: 8.491368e-08"
# not precise enough (default tol) > relative error

d45 <- pi*(1/4 + 1:10) ; one <- rep(1, 10)
tan(d45) == one  # mostly FALSE, as not exactly
 [1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
stopifnot(all.equal(
          tan(d45), one)) # TRUE, but not if we are picky:
all.equal(tan(d45), one, tolerance = 0)  # to see difference
[1] "Mean relative difference: 1.29526e-15"
all.equal(tan(d45), one, tolerance = 0, scale = 1)# "absolute diff.."
[1] "Mean absolute difference: 1.29526e-15"
all.equal(tan(d45), one, tolerance = 0, scale = 1+(-2:2)/1e9) # "absolute"
[1] "Mean absolute difference: 1.29526e-15"
all.equal(tan(d45), one, tolerance = 0, scale = 1+(-2:2)/1e6) # "scaled"
[1] "Mean scaled difference: 1.295258e-15"
## advanced: equality of environments
ae <- all.equal(as.environment("package:stats"),
                asNamespace("stats"))
stopifnot(is.character(ae), length(ae) > 10,
          ## were incorrectly "considered equal" in R <= 3.1.1
          all.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"
[1] "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))))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
3.967e-05 3.968e-05 3.968e-05 3.968e-05 3.969e-05 3.970e-05 
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)
plot of chunk example-base-all.equal-1
## comparison of date-time objects
now <- Sys.time()
stopifnot(
all.equal(now, now + 1e-4)  # TRUE (default tolerance = 0.001 seconds)
)
all.equal(now, now + 0.2)
[1] "Mean absolute difference: 0.2"
all.equal(now, as.POSIXlt(now, "UTC"))
[1] "'tzone' attributes are inconsistent ('' and 'UTC')"
stopifnot(
all.equal(now, as.POSIXlt(now, "UTC"), check.tzone = FALSE)  # TRUE
)

[Package base version 4.2.3 Index]