Test whether a co-occurrence matrix is represented in a DSM canonical format, or convert matrix to canonical format.
dsm.is.canonical(x, nonneg.check = FALSE)dsm.canonical.matrix(x, triplet = FALSE, annotate = FALSE, nonneg.check = FALSE)
a dense or sparse DSM co-occurrence matrix
if TRUE
, check whether all elements of the matrix are non-negative
if TRUE
, annotate x
with attributes sparse
and nonneg
, indicating whether the matrix is in sparse representation and non-negative, respectively. Non-negativity is only checked if nonneg.check=TRUE
; otherwise an existing attribute will be passed through without validation.
dsm.is.canonical()
returns a data frame containing a single row with the following items:
whether x
is a sparse (TRUE
) or dense (TRUE
) matrix
whether x
is in canonical format
whether all cells of x
are non-negative; may be NA
if nonneg.check=FALSE
matrix
for a dense matrix (even if x
is a denseMatrix
object);
of class dgCMatrix
(default) or dgTMatrix
(with triplet=TRUE
) for a sparse matrix.
If annotate=TRUE, the returned matrix has attributes sparse and nonneg (possibly NA).
Note that conversion into canonical format may result in unnecessary copying of x
, especially if annotate=TRUE
.
For optimal performance, set annotate=FALSE
whenever possible and do not call dsm.canonical.matrix()
as a no-op.
Instead of
M <- dsm.canonical.matrix(M, annotate=TRUE, nonneg=TRUE)
use
M.flags <- dsm.is.canonical(M, nonneg=TRUE) if (!M.flags$canonical) M <- dsm.canonical.matrix(M)
If nonneg.check=FALSE
and x
has an attribute nonneg
, its value is accepted without validation.