allequal {spam} | R Documentation |
Test if Two Sparse Matrices are (Nearly) Equal
Description
Utility to compare two spam
objects
testing 'near equality'. Depending on the type of difference, comparison is
still made to some extent, and a report of the differences is
returned.
Usage
## S3 method for class 'spam'
all.equal(target, current, tolerance = .Machine$double.eps^0.5,
scale = NULL, check.attributes = FALSE,...)
Arguments
target |
a |
current |
another |
tolerance |
numeric >= 0. Differences smaller than
|
scale |
numeric scalar > 0 (or |
check.attributes |
currently not yet implemented. |
... |
Further arguments for different methods. |
Details
Numerical comparisons for scale = NULL
(the default) are
typically on a relative difference scale unless the
target
values are close to zero or infinite. Specifically,
the scale is computed as the average absolute value of target
.
If this scale is finite and exceeds tolerance
, differences
are expressed relative to it; otherwise, absolute differences are used.
If scale
is numeric (and positive), absolute comparisons are
made after scaling (dividing) by scale
. Note that if all of
scale is sufficiently close to 1 (specifically, within tolerance
),
the difference is still reported as being on an absolute scale.
Do not use all.equal.spam
directly in if
expressions: either use isTRUE( all.equal.spam(...))
or
identical
if appropriate.
Cholesky decomposition routines use this function to test for symmetry.
A method for matrix-spam
objects is defined as well.
There is the additional catch of a zero matrix being represented by one zero element, see ‘Examples’ below.
Value
Either TRUE
or a vector of 'mode' "character"
describing the
differences between target
and current
.
Author(s)
Reinhard Furrer
See Also
isSymmetric.spam
and cleanup
.
Examples
obj <- diag.spam(2)
obj[1,2] <- .Machine$double.eps
all.equal( diag.spam(2), obj)
all.equal( t(obj), obj)
all.equal( t(obj), obj*1.1)
# We can compare a spam to a matrix
all.equal(diag(2),diag.spam(2))
# the opposite does often not make sense,
# hence, it is not implemented.
all.equal(diag.spam(2),diag(2))
# A zero matrix contains one element:
str(spam(0))
# hence
all.equal.spam(spam(0,3,3), diag.spam(0,3) )
norm(spam(0,3,3) - diag.spam(0,3) )