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)
## 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 )