'Logic' operations on NaArray objects
NaArray-Logic-methods.RdEXPERIMENTAL!!!
NaArray objects support operations from the Logic group
(i.e. & and |), as well as logical negation (!).
See ?S4groupGeneric in the methods package
for more information about the Logic group generic.
Note that in base R, Logic operations support input of type()
"logical", "integer", "double", or "complex".
However, the corresponding methods for NaArray objects only
support objects of type() "logical" for now.
Details
Three forms of 'Logic' operations involving NaArray objects are supported:
Between an NaArray object
naaand a single logical valuey:naa op y y op naaBetween two NaArray objects
naa1andnaa2of same dimensions (a.k.a. conformable arrays):naa1 op naa2Between an NaArray object
naaand an SVT_SparseArray objectsvtof same dimensions (a.k.a. conformable arrays):naa op svt svt op naaNote that, in this case,
|returns an NaArray object but&returns an SVT_SparseArray object.
Value
An NaArray object of type() "logical" and same
dimensions as the input object(s), except when & is used
between an NaArray object and an SVT_SparseArray object
in which case an SVT_SparseArray object is returned.
See also
S4groupGenericin the methods package.NaArray objects.
SVT_SparseArray objects.
Ordinary array objects in base R.
Examples
nam1 <- NaArray(dim=c(15, 6))
nam1[cbind(1:15, 2)] <- c(TRUE, FALSE, NA)
nam1[cbind(1:15, 5)] <- c(TRUE, NA, NA, FALSE, TRUE)
nam1
#> <15 x 6 NaMatrix> of type "logical" [nnacount=19 (21%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA TRUE NA NA TRUE NA
#> [2,] NA FALSE NA NA NA NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA TRUE NA NA FALSE NA
#> [5,] NA FALSE NA NA TRUE NA
#> ... . . . . . .
#> [11,] NA FALSE NA NA TRUE NA
#> [12,] NA NA NA NA NA NA
#> [13,] NA TRUE NA NA NA NA
#> [14,] NA FALSE NA NA FALSE NA
#> [15,] NA NA NA NA TRUE NA
!nam1
#> <15 x 6 NaMatrix> of type "logical" [nnacount=19 (21%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA FALSE NA NA FALSE NA
#> [2,] NA TRUE NA NA NA NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA FALSE NA NA TRUE NA
#> [5,] NA TRUE NA NA FALSE NA
#> ... . . . . . .
#> [11,] NA TRUE NA NA FALSE NA
#> [12,] NA NA NA NA NA NA
#> [13,] NA FALSE NA NA NA NA
#> [14,] NA TRUE NA NA TRUE NA
#> [15,] NA NA NA NA FALSE NA
nam1 & NA # replaces all TRUE's with NA's
#> <15 x 6 NaMatrix> of type "logical" [nnacount=8 (8.9%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA NA NA NA NA NA
#> [2,] NA FALSE NA NA NA NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA FALSE NA
#> [5,] NA FALSE NA NA NA NA
#> ... . . . . . .
#> [11,] NA FALSE NA NA NA NA
#> [12,] NA NA NA NA NA NA
#> [13,] NA NA NA NA NA NA
#> [14,] NA FALSE NA NA FALSE NA
#> [15,] NA NA NA NA NA NA
nam1 | NA # replaces all FALSE's with NA's
#> <15 x 6 NaMatrix> of type "logical" [nnacount=11 (12%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA TRUE NA NA TRUE NA
#> [2,] NA NA NA NA NA NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA TRUE NA NA NA NA
#> [5,] NA NA NA NA TRUE NA
#> ... . . . . . .
#> [11,] NA NA NA NA TRUE NA
#> [12,] NA NA NA NA NA NA
#> [13,] NA TRUE NA NA NA NA
#> [14,] NA NA NA NA NA NA
#> [15,] NA NA NA NA TRUE NA
nam2 <- NaArray(dim=dim(nam1))
nam2[c(2, 6, 12:17, 22:33, 55, 59:62, 90)] <- c(TRUE, NA)
nam2
#> <15 x 6 NaMatrix> of type "logical" [nnacount=13 (14%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA TRUE NA NA NA NA
#> [2,] TRUE NA TRUE NA TRUE NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA NA NA
#> [5,] NA NA NA NA NA NA
#> ... . . . . . .
#> [11,] NA TRUE NA NA NA NA
#> [12,] TRUE NA NA NA NA NA
#> [13,] NA TRUE NA NA NA NA
#> [14,] TRUE NA NA NA NA NA
#> [15,] NA TRUE NA TRUE NA NA
nam1 & nam2
#> <15 x 6 NaMatrix> of type "logical" [nnacount=11 (12%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA TRUE NA NA NA NA
#> [2,] NA FALSE NA NA NA NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA NA NA NA FALSE NA
#> [5,] NA FALSE NA NA NA NA
#> ... . . . . . .
#> [11,] NA FALSE NA NA NA NA
#> [12,] NA NA NA NA NA NA
#> [13,] NA TRUE NA NA NA NA
#> [14,] NA FALSE NA NA FALSE NA
#> [15,] NA NA NA NA NA NA
nam1 | nam2
#> <15 x 6 NaMatrix> of type "logical" [nnacount=21 (23%)]:
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] NA TRUE NA NA TRUE NA
#> [2,] TRUE NA TRUE NA TRUE NA
#> [3,] NA NA NA NA NA NA
#> [4,] NA TRUE NA NA NA NA
#> [5,] NA NA NA NA TRUE NA
#> ... . . . . . .
#> [11,] NA TRUE NA NA TRUE NA
#> [12,] TRUE NA NA NA NA NA
#> [13,] NA TRUE NA NA NA NA
#> [14,] TRUE NA NA NA NA NA
#> [15,] NA TRUE NA TRUE TRUE NA
## Sanity checks:
m1 <- as.matrix(nam1)
m2 <- as.matrix(nam2)
stopifnot(
identical(as.matrix(!nam1), !m1),
identical(as.matrix(nam1 & NA), m1 & NA),
identical(as.matrix(nam1 | NA), m1 | NA),
identical(as.matrix(nam1 & nam2), m1 & m2),
identical(as.matrix(nam1 | nam2), m1 | m2)
)