R: Construct a Classed Matrix

Matrix {Matrix} | R Documentation

## Construct a Classed Matrix

### Description

Construct a Matrix of a class that inherits from `Matrix`.

### Usage

    Matrix(data=NA, nrow=1, ncol=1, byrow=FALSE, dimnames=NULL,
           sparse = NULL, doDiag = TRUE, forceCheck = FALSE)

### Arguments

`data` | an optional numeric data vector or matrix.
`nrow` | when `data` is not a matrix, the desired number of rows
`ncol` | when `data` is not a matrix, the desired number of columns
`byrow` | logical. If `FALSE` (the default) the matrix is filled by columns, otherwise the matrix is filled by rows.
`dimnames` | a `dimnames` attribute for the matrix: a `list` of two character components. They are set if not `NULL` (as per default).
`sparse` | logical or `NULL`, specifying if the result should be sparse or not. By default, it is made sparse when more than half of the entries are 0. Note that when the resulting matrix is diagonal (“mathematically”), `sparse=FALSE` results in a `diagonalMatrix`, unless `doDiag=FALSE` as well, see the first examples.
`doDiag` | only when `sparse = FALSE`, logical indicating if a `diagonalMatrix` object should be considered (default). Otherwise, in such a case, a dense (symmetric) matrix will be returned.
`forceCheck` | logical indicating if the checks for structure should even happen when `data` is already a `"Matrix"` object.

### Details

If either of `nrow` or `ncol` is not given, an attempt is made to infer it from the length of `data` and the other parameter. Further, `Matrix()` makes efforts to keep `logical` matrices logical, i.e., inheriting from class `lMatrix`, and to determine specially structured matrices such as symmetric, triangular or diagonal ones. Note that a symmetric matrix also needs symmetric `dimnames`, e.g., by specifying `dimnames = list(NULL,NULL)`, see the examples.

Most of the time, the function works via a traditional (full) `matrix`. However, `Matrix(0, nrow,ncol)` directly constructs an “empty” sparseMatrix, as does `Matrix(FALSE, *)`.

Although it is sometime possible to mix unclassed matrices (created with `matrix`) with ones of class `"Matrix"`, it is much safer to always use carefully constructed ones of class `"Matrix"`.

### Value

Returns matrix of a class that inherits from `"Matrix"`. Only if `data` is not a `matrix` and does not already inherit from class `Matrix` are the arguments `nrow`, `ncol` and `byrow` made use of.

### See Also

The classes `Matrix`, `symmetricMatrix`, `triangularMatrix`, and `diagonalMatrix`; further, `matrix`.

Special matrices can be constructed, e.g., via `sparseMatrix` (sparse), `bdiag` (block-diagonal), `bandSparse` (banded sparse), or `Diagonal`.

### Examples

    Matrix(0, 3, 2)             # 3 by 2 matrix of zeros -> sparse
    Matrix(0, 3, 2, sparse=FALSE)# -> 'dense'
    Matrix(0, 2, 2, sparse=FALSE)# diagonal !
    Matrix(0, 2, 2, sparse=FALSE, doDiag=FALSE)# -> dense
    Matrix(1:6, 3, 2)           # a 3 by 2 matrix (+ integer warning)
    Matrix(1:6 + 1, nrow=3)

    ## logical ones:
    Matrix(diag(4) >  0)# -> "ldiMatrix" with diag = "U"
    Matrix(diag(4) >  0, sparse=TRUE)# -> sparse...
    Matrix(diag(4) >= 0)# -> "lsyMatrix" (of all 'TRUE')
    ## triangular
    l3 <- upper.tri(matrix(,3,3))
    (M <- Matrix(l3))  # -> "ltCMatrix"
    Matrix(! l3)# -> "ltrMatrix"
    as(l3, "CsparseMatrix")

    Matrix(1:9, nrow=3,
           dimnames = list(c("a", "b", "c"), c("A", "B", "C")))
    (I3 <- Matrix(diag(3)))# identity, i.e., unit "diagonalMatrix"
    str(I3) # note the empty 'x' slot

    (A <- cbind(a=c(2,1), b=1:2))# symmetric *apart* from dimnames
    Matrix(A)                    # hence 'dgeMatrix'
    (As <- Matrix(A, dimnames = list(NULL,NULL)))# -> symmetric
    stopifnot(is(As, "symmetricMatrix"),
              is(Matrix(0, 3,3), "sparseMatrix"),
              is(Matrix(FALSE, 1,1), "sparseMatrix"))

[Package Matrix version 1.1-4 Index]