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))
Arguments
x | a sparse matrix stored in triplet form, i.e., inheriting from class |
class.x | optional character string specifying |
di | the matrix dimension of |
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.
See Also
TsparseMatrix
, for uniqueness, notably dgTMatrix
.
Examples
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)
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.