relErr | R Documentation |
relErrV()
:Compute the signed relative error componentwise (“vectorized”)
between the target
and current
vectors,
using the absolute error, i.e., the difference
in case the relative error is not well defined, i.e., when target
is zero or infinite.
relErr()
:simply the mean absolute value of the
relative errors between target
and current
vectors;
typically the “same” as
all.equal.numeric(target, vector, tolerance=0, countEQ=TRUE)
.
Currently useful only when both vectors are finite.
relErrV(target, current, eps0 = .Machine$double.xmin)
relErr (target, current)
target |
numeric, possibly scalar. |
current |
numeric vector of |
eps0 |
non-negative number; values |
relErrV()
:a numeric vector of the same length (or array
of the same dimension) as current
.
relErr()
:a single number.
Martin Maechler, originally as part of Matrix package's ‘test-tools.R’.
all.equal.numeric()
is similar in spirit but returns TRUE
or
string containing the mean relative or absolute error.
## relErrV() test example: showing how it works fine with {NA, Inf, 0} :
eps <- 1e-4*c(-9, -8, -6, -4, 0.5, 1, 5)
target <- c(-1:1, 0, 0, NA, NaN, Inf, -Inf, Inf, 0 , Inf, 1 , -3:3)
current <- c(-1:1,1e-7,NaN,NA, 0 , Inf, Inf, 0, Inf, 1, Inf, -3:3+ eps)
cbind(target, current, absE = current-target,
relE = relErrV(target,current)) -> M ; M
stopifnot(exprs = {
is.logical(isFr <- is.finite(rF <- M[,"relE"]))
target==current | isFr == is.finite(aF <- M[,"absE"])
identical(aF[!isFr] , rF[!isFr])
identical(numeric(), relErrV(numeric(), integer())) # length 0 {used to fail}
})
tools::assertError(relErrV(1, numeric()), verbose=TRUE) # no longer allowed
## relErr() is pretty simple --- (possibly too simple, currently)
relErr
relErr(target, current) # NA (of course)
all.equal.numeric(target, current) ## "'is.NA' value mismatch ..."
## comparison after dropping NA's :
hasN <- is.na(target) | is.na(current)
all.equal(target[!hasN], current[!hasN], tolerance=0) # "Mean abs. diff.: Inf"
relErr(target[!hasN], current[!hasN]) # NaN (to improve?)
## comparison after only keeping cases where both are finite:
finN <- is.finite(target) & is.finite(current)
all.equal(target[finN], current[finN], tol=0) # "Mean abs.d.: 0.000279.."
all.equal(target[finN], current[finN], tol=0, countEQ=TRUE) # " " : 0.000239..
relErr(target[finN], current[finN]) # 0.0002392929
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.