'Arith' operations on NaArray objects
NaArray-Arith-methods.Rd
EXPERIMENTAL!!!
NaArray objects support all operations from the Arith
group.
See ?S4groupGeneric
in the methods package
for more information about the Arith
group generic.
Note that NaArray of type()
"complex"
don't support
Arith
operations at the moment.
Details
Three forms of 'Arith' operations involving NaArray objects are supported:
Between an NaArray object
naa
and an atomic vectory
:naa op y y op naa
Between two NaArray objects
naa1
andnaa2
of same dimensions (a.k.a. conformable arrays):naa1 op naa2
Between an NaArray object
naa
and an SVT_SparseArray objectsvt
of same dimensions (a.k.a. conformable arrays):naa op svt svt op naa
Value
An NaArray object of the same dimensions as the input object(s).
See also
S4groupGeneric
in the methods package.NaArray objects.
SVT_SparseArray objects.
Ordinary array objects in base R.
Examples
nam1 <- NaArray(dim=c(15, 6), type="integer")
nam1[cbind(1:15, 2)] <- 100:114
nam1[cbind(1:15, 5)] <- -(114:100)
nam1
#> <15 x 6 NaMatrix> of type "integer" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 100 NA NA -114 NA
#> [2,] NA 101 NA NA -113 NA
#> [3,] NA 102 NA NA -112 NA
#> [4,] NA 103 NA NA -111 NA
#> [5,] NA 104 NA NA -110 NA
#> ... . . . . . .
#> [11,] NA 110 NA NA -104 NA
#> [12,] NA 111 NA NA -103 NA
#> [13,] NA 112 NA NA -102 NA
#> [14,] NA 113 NA NA -101 NA
#> [15,] NA 114 NA NA -100 NA
nam1 * -0.01
#> <15 x 6 NaMatrix> of type "double" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA -1.00 NA NA 1.14 NA
#> [2,] NA -1.01 NA NA 1.13 NA
#> [3,] NA -1.02 NA NA 1.12 NA
#> [4,] NA -1.03 NA NA 1.11 NA
#> [5,] NA -1.04 NA NA 1.10 NA
#> ... . . . . . .
#> [11,] NA -1.10 NA NA 1.04 NA
#> [12,] NA -1.11 NA NA 1.03 NA
#> [13,] NA -1.12 NA NA 1.02 NA
#> [14,] NA -1.13 NA NA 1.01 NA
#> [15,] NA -1.14 NA NA 1.00 NA
nam1 * 10 # result is of type "double"
#> <15 x 6 NaMatrix> of type "double" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 1000 NA NA -1140 NA
#> [2,] NA 1010 NA NA -1130 NA
#> [3,] NA 1020 NA NA -1120 NA
#> [4,] NA 1030 NA NA -1110 NA
#> [5,] NA 1040 NA NA -1100 NA
#> ... . . . . . .
#> [11,] NA 1100 NA NA -1040 NA
#> [12,] NA 1110 NA NA -1030 NA
#> [13,] NA 1120 NA NA -1020 NA
#> [14,] NA 1130 NA NA -1010 NA
#> [15,] NA 1140 NA NA -1000 NA
nam1 * 10L # result is of type "integer"
#> <15 x 6 NaMatrix> of type "integer" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 1000 NA NA -1140 NA
#> [2,] NA 1010 NA NA -1130 NA
#> [3,] NA 1020 NA NA -1120 NA
#> [4,] NA 1030 NA NA -1110 NA
#> [5,] NA 1040 NA NA -1100 NA
#> ... . . . . . .
#> [11,] NA 1100 NA NA -1040 NA
#> [12,] NA 1110 NA NA -1030 NA
#> [13,] NA 1120 NA NA -1020 NA
#> [14,] NA 1130 NA NA -1010 NA
#> [15,] NA 1140 NA NA -1000 NA
nam1 * c(10, 5, 0.1) # right vector recycled along 1st dimension
#> <15 x 6 NaMatrix> of type "double" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 1000.0 NA NA -1140.0 NA
#> [2,] NA 505.0 NA NA -565.0 NA
#> [3,] NA 10.2 NA NA -11.2 NA
#> [4,] NA 1030.0 NA NA -1110.0 NA
#> [5,] NA 520.0 NA NA -550.0 NA
#> ... . . . . . .
#> [11,] NA 550.0 NA NA -520.0 NA
#> [12,] NA 11.1 NA NA -10.3 NA
#> [13,] NA 1120.0 NA NA -1020.0 NA
#> [14,] NA 565.0 NA NA -505.0 NA
#> [15,] NA 11.4 NA NA -10.0 NA
nam1 / 10L
#> <15 x 6 NaMatrix> of type "double" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 10.0 NA NA -11.4 NA
#> [2,] NA 10.1 NA NA -11.3 NA
#> [3,] NA 10.2 NA NA -11.2 NA
#> [4,] NA 10.3 NA NA -11.1 NA
#> [5,] NA 10.4 NA NA -11.0 NA
#> ... . . . . . .
#> [11,] NA 11.0 NA NA -10.4 NA
#> [12,] NA 11.1 NA NA -10.3 NA
#> [13,] NA 11.2 NA NA -10.2 NA
#> [14,] NA 11.3 NA NA -10.1 NA
#> [15,] NA 11.4 NA NA -10.0 NA
nam1 ^ 2
#> <15 x 6 NaMatrix> of type "double" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 10000 NA NA 12996 NA
#> [2,] NA 10201 NA NA 12769 NA
#> [3,] NA 10404 NA NA 12544 NA
#> [4,] NA 10609 NA NA 12321 NA
#> [5,] NA 10816 NA NA 12100 NA
#> ... . . . . . .
#> [11,] NA 12100 NA NA 10816 NA
#> [12,] NA 12321 NA NA 10609 NA
#> [13,] NA 12544 NA NA 10404 NA
#> [14,] NA 12769 NA NA 10201 NA
#> [15,] NA 12996 NA NA 10000 NA
nam1 ^ (2:6)
#> <15 x 6 NaMatrix> of type "double" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] NA 10000 NA NA 12996
#> [2,] NA 1030301 NA NA -1442897
#> [3,] NA 108243216 NA NA 157351936
#> [4,] NA 11592740743 NA NA -16850581551
#> [5,] NA 1265319018496 NA NA 1771561000000
#> ... . . . . .
#> [11,] NA 12100 NA NA 10816
#> [12,] NA 1367631 NA NA -1092727
#> [13,] NA 157351936 NA NA 108243216
#> [14,] NA 18424351793 NA NA -10510100501
#> [15,] NA 2194972623936 NA NA 1000000000000
#> [,6]
#> [1,] NA
#> [2,] NA
#> [3,] NA
#> [4,] NA
#> [5,] NA
#> ... .
#> [11,] NA
#> [12,] NA
#> [13,] NA
#> [14,] NA
#> [15,] NA
nam1 %% 5L
#> <15 x 6 NaMatrix> of type "integer" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 0 NA NA 1 NA
#> [2,] NA 1 NA NA 2 NA
#> [3,] NA 2 NA NA 3 NA
#> [4,] NA 3 NA NA 4 NA
#> [5,] NA 4 NA NA 0 NA
#> ... . . . . . .
#> [11,] NA 0 NA NA 1 NA
#> [12,] NA 1 NA NA 2 NA
#> [13,] NA 2 NA NA 3 NA
#> [14,] NA 3 NA NA 4 NA
#> [15,] NA 4 NA NA 0 NA
nam1 %/% 5L
#> <15 x 6 NaMatrix> of type "integer" [nnacount=30 (33%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 20 NA NA -23 NA
#> [2,] NA 20 NA NA -23 NA
#> [3,] NA 20 NA NA -23 NA
#> [4,] NA 20 NA NA -23 NA
#> [5,] NA 20 NA NA -22 NA
#> ... . . . . . .
#> [11,] NA 22 NA NA -21 NA
#> [12,] NA 22 NA NA -21 NA
#> [13,] NA 22 NA NA -21 NA
#> [14,] NA 22 NA NA -21 NA
#> [15,] NA 22 NA NA -20 NA
nam2 <- NaArray(dim=dim(nam1), type="double")
nam2[c(2, 6, 12:17, 22:33, 55, 59:62, 90)] <- runif(26)
nam2
#> <15 x 6 NaMatrix> of type "double" [nnacount=26 (29%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 0.8565875 0.1217961 NA 0.1848031 NA
#> [2,] 0.8317640 0.1587975 0.6137151 NA 0.3428992 NA
#> [3,] NA NA 0.7950497 NA NA NA
#> [4,] NA NA NA NA NA NA
#> [5,] NA NA NA NA NA NA
#> ... . . . . . .
#> [11,] NA 0.95540691 NA NA NA NA
#> [12,] 0.72359303 0.07164535 NA NA NA NA
#> [13,] 0.88313494 0.38122979 NA NA NA NA
#> [14,] 0.66474581 0.45827544 NA 0.07804209 NA NA
#> [15,] 0.14949065 0.14534746 NA 0.27858364 NA 0.71230998
nam2 + nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 100.8566 NA NA -113.8152 NA
#> [2,] NA 101.1588 NA NA -112.6571 NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA NA NA
#> [5,] NA NA NA NA NA NA
#> ... . . . . . .
#> [11,] NA 110.9554 NA NA NA NA
#> [12,] NA 111.0716 NA NA NA NA
#> [13,] NA 112.3812 NA NA NA NA
#> [14,] NA 113.4583 NA NA NA NA
#> [15,] NA 114.1453 NA NA NA NA
nam2 - nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA -99.14341 NA NA 114.18480 NA
#> [2,] NA -100.84120 NA NA 113.34290 NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA NA NA
#> [5,] NA NA NA NA NA NA
#> ... . . . . . .
#> [11,] NA -109.0446 NA NA NA NA
#> [12,] NA -110.9284 NA NA NA NA
#> [13,] NA -111.6188 NA NA NA NA
#> [14,] NA -112.5417 NA NA NA NA
#> [15,] NA -113.8547 NA NA NA NA
nam2 * nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 85.65875 NA NA -21.06756 NA
#> [2,] NA 16.03855 NA NA -38.74761 NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA NA NA
#> [5,] NA NA NA NA NA NA
#> ... . . . . . .
#> [11,] NA 105.094760 NA NA NA NA
#> [12,] NA 7.952634 NA NA NA NA
#> [13,] NA 42.697737 NA NA NA NA
#> [14,] NA 51.785125 NA NA NA NA
#> [15,] NA 16.569610 NA NA NA NA
nam2 / nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] NA 0.008565875 NA NA -0.001621080
#> [2,] NA 0.001572252 NA NA -0.003034507
#> [3,] NA NA NA NA NA
#> [4,] NA NA NA NA NA
#> [5,] NA NA NA NA NA
#> ... . . . . .
#> [11,] NA 0.0086855174 NA NA NA
#> [12,] NA 0.0006454536 NA NA NA
#> [13,] NA 0.0034038374 NA NA NA
#> [14,] NA 0.0040555349 NA NA NA
#> [15,] NA 0.0012749777 NA NA NA
#> [,6]
#> [1,] NA
#> [2,] NA
#> [3,] NA
#> [4,] NA
#> [5,] NA
#> ... .
#> [11,] NA
#> [12,] NA
#> [13,] NA
#> [14,] NA
#> [15,] NA
nam2 ^ nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] NA 1.893102e-07 NA NA 3.936762e+83
#> [2,] NA 1.928443e-81 NA NA 3.358793e+52
#> [3,] NA NA NA NA NA
#> [4,] NA NA NA NA NA
#> [5,] NA NA NA NA NA
#> ... . . . . .
#> [11,] NA 6.617923e-03 NA NA NA
#> [12,] NA 8.430775e-128 NA NA NA
#> [13,] NA 1.238583e-47 NA NA NA
#> [14,] NA 5.096876e-39 NA NA NA
#> [15,] NA 3.269247e-96 NA NA NA
#> [,6]
#> [1,] NA
#> [2,] NA
#> [3,] NA
#> [4,] NA
#> [5,] NA
#> ... .
#> [11,] NA
#> [12,] NA
#> [13,] NA
#> [14,] NA
#> [15,] NA
nam2 %% nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] NA 0.8565875 NA NA -113.8151969
#> [2,] NA 0.1587975 NA NA -112.6571008
#> [3,] NA NA NA NA NA
#> [4,] NA NA NA NA NA
#> [5,] NA NA NA NA NA
#> ... . . . . .
#> [11,] NA 0.95540691 NA NA NA
#> [12,] NA 0.07164535 NA NA NA
#> [13,] NA 0.38122979 NA NA NA
#> [14,] NA 0.45827544 NA NA NA
#> [15,] NA 0.14534746 NA NA NA
#> [,6]
#> [1,] NA
#> [2,] NA
#> [3,] NA
#> [4,] NA
#> [5,] NA
#> ... .
#> [11,] NA
#> [12,] NA
#> [13,] NA
#> [14,] NA
#> [15,] NA
nam2 %/% nam1
#> <15 x 6 NaMatrix> of type "double" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA 0 NA NA -1 NA
#> [2,] NA 0 NA NA -1 NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA NA NA
#> [5,] NA NA NA NA NA NA
#> ... . . . . . .
#> [11,] NA 0 NA NA NA NA
#> [12,] NA 0 NA NA NA NA
#> [13,] NA 0 NA NA NA NA
#> [14,] NA 0 NA NA NA NA
#> [15,] NA 0 NA NA NA NA
## Sanity checks:
m1 <- as.matrix(nam1)
m2 <- as.matrix(nam2)
stopifnot(
identical(as.matrix(nam1 * -0.01), m1 * -0.01),
identical(as.matrix(nam1 * 10), m1 * 10),
identical(as.matrix(nam1 * 10L), m1 * 10L),
identical(as.matrix(nam1 / 10L), m1 / 10L),
identical(as.matrix(nam1 ^ 3.5), m1 ^ 3.5),
identical(as.matrix(nam1 %% 5L), m1 %% 5L),
identical(as.matrix(nam1 %/% 5L), m1 %/% 5L),
identical(as.matrix(nam2 + nam1), m2 + m1),
identical(as.matrix(nam2 - nam1), m2 - m1),
identical(as.matrix(nam2 * nam1), m2 * m1),
identical(as.matrix(nam2 / nam1), m2 / m1),
all.equal(as.matrix(nam2 ^ nam1), m2 ^ m1),
identical(as.matrix(nam2 %% nam1), m2 %% m1),
identical(as.matrix(nam2 %/% nam1), m2 %/% m1)
)