| uniqTsparse {Matrix} | R Documentation |
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.
uniqTsparse(x, class.x = c(class(x))) anyDuplicatedT(x, di = dim(x))
x |
a sparse matrix stored in triplet form, i.e., inheriting
from class |
class.x |
optional character string specifying |
di |
the matrix dimension of |
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.
TsparseMatrix, for uniqueness, notably
dgTMatrix.
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]:
L2.N <- L2; L2.N@x[2] <- NA; L2.N
validObject(L2.N)
(m2N <- as.matrix(L2.N)) # looks "ok"
iL <- as.integer(m2N)
stopifnot(identical(10L, which(is.na(match(iL, 0:1)))))
symnum(m2N)