%&%-methods | R Documentation |

`%&%`

and MethodsFor boolean or “patter**n**” matrices, i.e., **R** objects of
class `nMatrix`

, it is natural to allow matrix
products using boolean instead of numerical arithmetic.

In package Matrix, we use the binary operator `%&%`

(aka
“infix”) function) for this and provide methods for all our
matrices and the traditional **R** matrices (see `matrix`

).

a pattern matrix, i.e., inheriting from `"nMatrix"`

,
or an `"ldiMatrix"`

in case of a diagonal matrix.

We provide methods for both the “traditional” (**R** base) matrices
and numeric vectors and conceptually all matrices and
`sparseVector`

s in package Matrix.

`signature(x = "ANY", y = "ANY")`

`signature(x = "ANY", y = "Matrix")`

`signature(x = "Matrix", y = "ANY")`

`signature(x = "mMatrix", y = "mMatrix")`

`signature(x = "nMatrix", y = "nMatrix")`

`signature(x = "nMatrix", y = "nsparseMatrix")`

`signature(x = "nsparseMatrix", y = "nMatrix")`

`signature(x = "nsparseMatrix", y = "nsparseMatrix")`

`signature(x = "sparseVector", y = "mMatrix")`

`signature(x = "mMatrix", y = "sparseVector")`

`signature(x = "sparseVector", y = "sparseVector")`

These boolean arithmetic matrix products had been newly introduced for Matrix 1.2.0 (March 2015). Its implementation has still not been tested extensively.

Originally, it was left unspecified how non-structural zeros, i.e., `0`

's
as part of the `M@x`

slot should be treated for numeric
(`"dMatrix"`

) and logical (`"lMatrix"`

)
sparse matrices. We now specify that boolean matrix products should behave as if
applied to `drop0(M)`

, i.e., as if dropping such zeros from
the matrix before using it.

Equivalently, for all matrices `M`

, boolean arithmetic should work as if
applied to `M != 0`

(or `M != FALSE`

.

The current implementation ends up coercing both `x`

and `y`

to
(virtual) class `nsparseMatrix`

which may be quite inefficient
for dense matrices. A future implementation may well return a matrix
with **different** class, but the “same” content, i.e., the
same matrix entries *m[i,j]*.

`%*%`

, `crossprod()`

, or `tcrossprod()`

,
for (regular) matrix product methods.

set.seed(7) L <- Matrix(rnorm(20) > 1, 4,5) (N <- as(L, "nMatrix")) L. <- L; L.[1:2,1] <- TRUE; L.@x[1:2] <- FALSE; L. # has "zeros" to drop0() D <- Matrix(round(rnorm(30)), 5,6) # -> values in -1:1 (for this seed) L %&% D stopifnot(identical(L %&% D, N %&% D), all(L %&% D == as((L %*% abs(D)) > 0, "sparseMatrix"))) ## cross products , possibly with boolArith = TRUE : crossprod(N) # -> sparse patter'n' (TRUE/FALSE : boolean arithmetic) crossprod(N +0) # -> numeric Matrix (with same "pattern") stopifnot(all(crossprod(N) == t(N) %&% N), identical(crossprod(N), crossprod(N +0, boolArith=TRUE)), identical(crossprod(L), crossprod(N , boolArith=FALSE))) crossprod(D, boolArith = TRUE) # pattern: "nsCMatrix" crossprod(L, boolArith = TRUE) # ditto crossprod(L, boolArith = FALSE) # numeric: "dsCMatrix"

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.