SparseArray-Arith-methods | R Documentation |
SparseArray derivatives support operations from the Arith
group, with some restrictions.
See ?S4groupGeneric
in the methods package
for more information about the Arith
group generic.
IMPORTANT NOTES:
Only SVT_SparseArray objects are supported at the moment. Support for COO_SparseArray objects might be added in the future.
SVT_SparseArray of type()
"complex"
don't
support Arith
operations at the moment.
Two forms of 'Arith' operations are supported:
Between an SVT_SparseArray object svt
and a single
value y
:
svt op y y op svt
The Arith
operations that support this form are: *
,
/
, ^
, %%
,%/%
.
Note that, except for *
(for which both svt * y
and y * svt
are supported), single value y
must
be on the right e.g. svt ^ 3
.
Between two SVT_SparseArray objects svt1
and
svt2
of same dimensions (a.k.a. conformable arrays):
svt1 op svt2
The Arith
operations that support this form are: +
,
-
, *
.
A SparseArray derivative of the same dimensions as the input object(s).
S4groupGeneric
in the methods package.
SparseArray objects.
Ordinary array objects in base R.
## ---------------------------------------------------------------------
## Basic examples
## ---------------------------------------------------------------------
svt1 <- SVT_SparseArray(dim=c(15, 6), type="integer")
svt1[cbind(1:15, 2)] <- 100:114
svt1[cbind(1:15, 5)] <- -(114:100)
svt1
svt1 * -0.01
svt1 * 10 # result is of type "double"
svt1 * 10L # result is of type "integer"
svt1 / 10L
svt1 ^ 3.5
svt1 %% 5L
svt1 %/% 5L
svt2 <- SVT_SparseArray(dim=dim(svt1), type="double")
svt2[c(2, 6, 12:17, 22:33, 55, 59:62, 90)] <- runif(26)
svt2
svt1 + svt2
svt1 - svt2
svt1 * svt2
svt2 * (0.1 * svt1 - svt2 ^ 2) + svt1 / sum(svt2)
## Sanity checks:
m1 <- as.matrix(svt1)
m2 <- as.matrix(svt2)
stopifnot(
identical(as.matrix(svt1 * -0.01), m1 * -0.01),
identical(as.matrix(svt1 * 10), m1 * 10),
identical(as.matrix(svt1 * 10L), m1 * 10L),
identical(as.matrix(svt1 / 10L), m1 / 10L),
identical(as.matrix(svt1 ^ 3.5), m1 ^ 3.5),
identical(as.matrix(svt1 %% 5L), m1 %% 5L),
identical(as.matrix(svt1 %/% 5L), m1 %/% 5L),
identical(as.matrix(svt1 + svt2), m1 + m2),
identical(as.matrix(svt1 - svt2), m1 - m2),
identical(as.matrix(svt1 * svt2), m1 * m2),
all.equal(as.matrix(svt2 * (0.1 * svt1 - svt2 ^ 2) + svt1 / sum(svt2)),
m2 * (0.1 * m1 - m2 ^ 2) + m1 / sum(m2))
)
## ---------------------------------------------------------------------
## An example combining operations from the 'Arith', 'Compare',
## and 'Logic' groups
## ---------------------------------------------------------------------
m3 <- matrix(0L, nrow=15, ncol=6)
m3[c(2, 6, 12:17, 22:33, 55, 59:62, 90)] <- 101:126
svt3 <- SparseArray(m3)
## Can be 5x or 10x faster than with a dgCMatrix object on a big
## SVT_SparseMatrix object!
svt4 <- (svt3^1.5 + svt3) %% 100 - 0.2 * svt3 > 0
svt4
## Sanity check:
m4 <- (m3^1.5 + m3) %% 100 - 0.2 * m3 > 0
stopifnot(identical(as.matrix(svt4), m4))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.