pack-methods | R Documentation |
pack()
coerces dense symmetric and dense triangular matrices
from unpacked format (storing the full matrix) to packed format
(storing only one of the upper and lower triangles). unpack()
performs the reverse coercion. The two formats are formalized
by the virtual classes "packedMatrix"
and
"unpackedMatrix"
.
pack(x, ...)
## S4 method for signature 'dgeMatrix'
pack(x, symmetric = NA, upperTri = NA, ...)
## S4 method for signature 'lgeMatrix'
pack(x, symmetric = NA, upperTri = NA, ...)
## S4 method for signature 'ngeMatrix'
pack(x, symmetric = NA, upperTri = NA, ...)
## S4 method for signature 'matrix'
pack(x, symmetric = NA, upperTri = NA, ...)
unpack(x, ...)
x |
A dense symmetric or dense triangular matrix.
|
symmetric |
logical (including |
upperTri |
(for triangular |
... |
further arguments passed to or from other methods. |
pack(x)
checks matrices x
not inheriting from
one of the virtual classes "symmetricMatrix"
"triangularMatrix"
for symmetry
(via isSymmetric()
)
then for upper and lower triangularity
(via isTriangular()
) in order to identify a suitable
coercion. Setting one or both of symmetric
and upperTri
to TRUE
or FALSE
rather than NA
allows skipping
of irrelevant tests for large matrices known to be symmetric or
(upper or lower) triangular.
Users should not assume that pack()
and unpack()
are inverse operations. Specifically, y <- unpack(pack(x))
may not reproduce an "unpackedMatrix"
x
in the sense of
identical()
. See the examples.
pack()
:a "packedMatrix"
giving
the condensed representation of x
.
unpack()
:an "unpackedMatrix"
giving
the full storage representation of x
.
showMethods("pack")
(s <- crossprod(matrix(sample(15), 5,3))) # traditional symmetric matrix
(sp <- pack(s))
mt <- as.matrix(tt <- tril(s))
(pt <- pack(mt))
stopifnot(identical(pt, pack(tt)),
dim(s ) == dim(sp), all(s == sp),
dim(mt) == dim(pt), all(mt == pt), all(mt == tt))
showMethods("unpack")
(cp4 <- chol(Hilbert(4))) # is triangular
tp4 <- pack(cp4) # [t]riangular [p]acked
str(tp4)
(unpack(tp4))
stopifnot(identical(tp4, pack(unpack(tp4))))
z1 <- new("dsyMatrix", Dim = c(2L, 2L), x = as.double(1:4), uplo = "U")
z2 <- unpack(pack(z1))
stopifnot(!identical(z1, z2), # _not_ identical
all(z1 == z2)) # but mathematically equal
cbind(z1@x, z2@x) # (unused!) lower triangle is "lost" in translation
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.