Learn R Programming

Matrix (version 1.5-1)

uniqTsparse: Unique (Sorted) TsparseMatrix Representations

Description

Detect or “unify” (or “standardize”) non-unique TsparseMatrix matrices, prducing unique \((i,j,x)\) triplets which are sorted, first in \(j\), then in \(i\) (in the sense of order(j,i)).

Note that new(.), spMatrix or sparseMatrix constructors for "dgTMatrix" (and other "TsparseMatrix" classes) implicitly add \(x_k\)'s that belong to identical \((i_k, j_k)\) pairs.

anyDuplicatedT() reports the index of the first duplicated pair, or 0 if there is none.

uniqTsparse(x) replaces duplicated index pairs \((i,j)\) and their corresponding x slot entries by the triple \((i,j, sx)\) where sx = sum(x [<all pairs matching (i,j)>]), and for logical x, addition is replaced by logical \(or\).

Usage

uniqTsparse(x, class.x = c(class(x)))
anyDuplicatedT(x, di = dim(x))

Value

uniqTsparse(x) returns a TsparseMatrix

“like x”, of the same class and with the same elements, just internally possibly changed to “unique”

\((i,j,x)\) triplets in sorted order.

anyDuplicatedT(x) returns an integer as

anyDuplicated, the index

of the first duplicated entry (from the \((i,j)\) pairs) if there is one, and 0 otherwise.

Arguments

x

a sparse matrix stored in triplet form, i.e., inheriting from class TsparseMatrix.

class.x

optional character string specifying class(x).

di

the matrix dimension of x, dim(x).

See Also

TsparseMatrix, for uniqueness, notably dgTMatrix.

Examples

Run this code
example("dgTMatrix-class", echo=FALSE)
## -> 'T2'  with (i,j,x) slots of length 5 each
T2u <- uniqTsparse(T2)
stopifnot(## They "are" the same (and print the same):
          all.equal(T2, T2u, tol=0),
          ## but not internally:
          anyDuplicatedT(T2)  == 2,
          anyDuplicatedT(T2u) == 0,
          length(T2 @x) == 5,
          length(T2u@x) == 3)

## is 'x' a "uniq Tsparse" Matrix ?  [requires x to be TsparseMatrix!]
non_uniqT <- function(x, di = dim(x))
  is.unsorted(x@j) || anyDuplicatedT(x, di)
non_uniqT(T2 ) # TRUE
non_uniqT(T2u) # FALSE

T3 <- T2u
T3[1, c(1,3)] <- 10; T3[2, c(1,5)] <- 20
T3u <- uniqTsparse(T3)
str(T3u) # sorted in 'j', and within j, sorted in i
stopifnot(!non_uniqT(T3u))

## Logical l.TMatrix and n.TMatrix :
(L2 <- T2 > 0)
validObject(L2u <- uniqTsparse(L2))
(N2 <- as(L2, "nMatrix"))
validObject(N2u <- uniqTsparse(N2))
stopifnot(N2u@i == L2u@i, L2u@i == T2u@i,  N2@i == L2@i, L2@i == T2@i,
          N2u@j == L2u@j, L2u@j == T2u@j,  N2@j == L2@j, L2@j == T2@j)
# now with a nasty NA  [partly failed in Matrix 1.1-5]:
L.0N <- L.1N <- L2
L.0N@x[1:2] <- c(FALSE, NA)
L.1N@x[1:2] <- c(TRUE, NA)
validObject(L.0N)
validObject(L.1N)
(m.0N <- as.matrix(L.0N))
(m.1N <- as.matrix(L.1N))
stopifnot(identical(10L, which(is.na(m.0N))), !anyNA(m.1N))
symnum(m.0N)
symnum(m.1N)

Run the code above in your browser using DataLab