Relative Error When Appropriate, Absolute Otherwise
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 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)) ## 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
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.