R: Map Matrix to its Triplet Representation

mat2triplet {Matrix} | R Documentation

## Map Matrix to its Triplet Representation

### Description

From an R object coercible to `"TsparseMatrix"`, typically a (sparse) matrix, produce its triplet representation which may collapse to a “Duplet” in the case of binary aka pattern, such as `"nMatrix"` objects.

### Usage

    mat2triplet(x, uniqT = FALSE)

### Arguments

`x` | any R object for which `as(x, "TsparseMatrix")` works; typically a `matrix` of one of the Matrix package matrices.
`uniqT` | `logical` indicating if the triplet representation should be ‘unique’ in the sense of `uniqTsparse()`.

### Value

A `list`, typically with three components,

`i` | vector of row indices for all non-zero entries of `x`
`i` | vector of columns indices for all non-zero entries of `x`
`x` | vector of all non-zero entries of `x`; exists only when `as(x, "TsparseMatrix")` is not a `"nsparseMatrix"`.

Note that the `order` of the entries is determined by the coercion to `"TsparseMatrix"` and hence typically with increasing `j` (and increasing `i` within ties of `j`).

### Note

The `mat2triplet()` utility was created to be a more efficient and more predictable substitute for `summary(<sparseMatrix>)`. UseRs have wrongly expected the latter to return a data frame with columns `i` and `j` which however is wrong for a `"diagonalMatrix"`.

### See Also

The `summary()` method for `"sparseMatrix"`, `summary,sparseMatrix-method`.

`mat2triplet()` is conceptually the inverse function of `spMatrix` and (one case of) `sparseMatrix`.

### Examples

    if(FALSE) ## The function is defined (don't redefine here!), simply as
    mat2triplet <- function(x, uniqT = FALSE) {
        T <- as(x, "TsparseMatrix")
        if(uniqT && anyDuplicatedT(T)) T <- .uniqTsparse(T)
        if(is(T, "nsparseMatrix"))
             list(i = T@i + 1L, j = T@j + 1L)
        else list(i = T@i + 1L, j = T@j + 1L, x = T@x)
    }

    i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
    (Ax <- sparseMatrix(i, j, x = x)) ##  8 x 10 "dgCMatrix"
    str(trA <- mat2triplet(Ax))
    stopifnot(i == sort(trA$i),  sort(j) == trA$j,  x == sort(trA$x))

    D <- Diagonal(x=4:2)
    summary(D)
    str(mat2triplet(D))

[Package Matrix version 1.3-4 Index]