spMatrix {Matrix}R Documentation

Sparse Matrix Constructor From Triplet

Description

User friendly construction of a sparse matrix (inheriting from class TsparseMatrix) from the triplet representation.

Usage

spMatrix(nrow, ncol, i, j, x)

Arguments

nrow, ncol integers specifying the desired number of rows and columns.
i,j integer vectors of the same length specifying the locations of the non-zero (or non-TRUE) entries of the matrix.
x atomic vector of the same length as i and j, specifying the values of the non-zero entries.

Value

A sparse matrix in triplet form, as an R object inheriting from both TsparseMatrix and generalMatrix.
The matrix M will have M[i[k], j[k]] == x[k], for k = 1,2,..., n, where n = length(i) and M[ i', j' ] == 0 for all other pairs (i',j').

See Also

Matrix(*, sparse=TRUE) for the more usual constructor of such matrices; further bdiag and Diagonal for (block-)diagonal matrix constructors.

Consider TsparseMatrix and similar class definition help files.

Examples

## simple example
A <- spMatrix(10,20, i = c(1,3:8),
                     j = c(2,9,6:10),
                     x = 7 * (1:7))
A # a "dgTMatrix"
summary(A)
str(A) # note that *internally* 0-based indices (i,j) are used

L <- spMatrix(9, 30, i = rep(1:9, 3), 1:27,
              (1:27) %% 4 != 1)
L # an "lgTMatrix"

### This is a useful utility, to be used for experiments :

 rSpMatrix <- function(nrow, ncol, nnz,
                       rand.x = function(n) round(rnorm(nnz), 2))
 {
     ## Purpose: random sparse matrix
     ## --------------------------------------------------------------
     ## Arguments: (nrow,ncol): dimension
     ##          nnz  :  number of non-zero entries
     ##         rand.x:  random number generator for 'x' slot
     ## --------------------------------------------------------------
     ## Author: Martin Maechler, Date: 14.-16. May 2007
     stopifnot((nnz <- as.integer(nnz)) >= 0,
               nrow >= 0, ncol >= 0,
               nnz <= nrow * ncol)
     spMatrix(nrow, ncol,
              i = sample(nrow, nnz, replace = TRUE),
              j = sample(ncol, nnz, replace = TRUE),
              x = rand.x(nnz))
 }

 M1 <- rSpMatrix(100000, 20, nnz = 200)
 summary(M1)

[Package Matrix version 0.99875-2 Index]