Skip to contents

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:

  1. Between an NaArray object naa and an atomic vector y:

        naa op y
        y op naa
  2. Between two NaArray objects naa1 and naa2 of same dimensions (a.k.a. conformable arrays):

        naa1 op naa2
  3. Between an NaArray object naa and an SVT_SparseArray object svt 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

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)
)