R: Test if Two 'spam' Objects are (Nearly) Equal

allequal {spam} | R Documentation

## Test if Two 'spam' Objects 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 `spam` object.
`current` | another `spam` object to be compared with `target`.
`tolerance` | numeric >= 0. Differences smaller than `tolerance` are not considered.
`scale` | numeric scalar > 0 (or `NULL`). See ‘Details’.
`check.attributes` | currently not yet implemented.
`...` | Further arguments for different methods.

### Details

Numerical comparisons for `scale = NULL` (the default) are done by first computing the mean absolute difference of the two numerical vectors. If this is smaller than `tolerance` or not finite, absolute differences are used, otherwise relative differences scaled by the mean absolute difference.

If `scale` is positive, absolute comparisons are made after scaling (dividing) by `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) )

[Package spam version 2.2-2 Index]