nnzero.Rd
Returns the number of non-zero values of a numeric-like R object, and
in particular an object x
inheriting from class
Matrix
.
nnzero(x, na.counted = NA)
an R object, typically inheriting from class
Matrix
or numeric
.
a logical
describing how
NA
s should be counted. There are three possible
settings for na.counted
:
NA
s are counted as non-zero (since
“they are not zero”).
(default)the result will be NA
if there are NA
's in
x
(since “NA's are not known, i.e., may be zero”).
NA
s are omitted from x
before
the non-zero entries are counted.
For sparse matrices, you may often want to use na.counted = TRUE
.
signature(x = "ANY")
the default method for
non-Matrix
class objects, simply counts the
number 0
s in x
, counting NA
's depending on
the na.counted
argument, see above.
signature(x = "denseMatrix")
conceptually the same as
for traditional matrix
objects, care has to be taken
for "symmetricMatrix"
objects.
signature(x = "diagonalMatrix")
, and
signature(x = "indMatrix")
fast simple methods for these
special "sparseMatrix"
classes.
signature(x = "sparseMatrix")
typically, the most
interesting method, also carefully taking
"symmetricMatrix"
objects into account.
the number of non zero entries in x
(typically
integer
).
Note that for a symmetric sparse matrix S
(i.e., inheriting from
class symmetricMatrix
), nnzero(S)
is
typically twice the length(S@x)
.
m <- Matrix(0+1:28, nrow = 4)
m[-3,c(2,4:5,7)] <- m[ 3, 1:4] <- m[1:3, 6] <- 0
(mT <- as(m, "TsparseMatrix"))
#> 4 x 7 sparse Matrix of class "dgTMatrix"
#>
#> [1,] 1 . 9 . . . .
#> [2,] 2 . 10 . . . .
#> [3,] . . . . 19 . 27
#> [4,] 4 . 12 . . 24 .
nnzero(mT)
#> [1] 9
(S <- crossprod(mT))
#> 7 x 7 sparse Matrix of class "dsCMatrix"
#>
#> [1,] 21 . 77 . . 96 .
#> [2,] . . . . . . .
#> [3,] 77 . 325 . . 288 .
#> [4,] . . . . . . .
#> [5,] . . . . 361 . 513
#> [6,] 96 . 288 . . 576 .
#> [7,] . . . . 513 . 729
nnzero(S)
#> [1] 13
str(S) # slots are smaller than nnzero()
#> Formal class 'dsCMatrix' [package "Matrix"] with 7 slots
#> ..@ i : int [1:9] 0 0 2 4 0 2 5 4 6
#> ..@ p : int [1:8] 0 1 1 3 3 4 7 9
#> ..@ Dim : int [1:2] 7 7
#> ..@ Dimnames:List of 2
#> .. ..$ : NULL
#> .. ..$ : NULL
#> ..@ x : num [1:9] 21 77 325 361 96 288 576 513 729
#> ..@ uplo : chr "U"
#> ..@ factors : list()
stopifnot(nnzero(S) == sum(as.matrix(S) != 0))# failed earlier
data(KNex, package = "Matrix")
M <- KNex$mm
class(M)
#> [1] "dgCMatrix"
#> attr(,"package")
#> [1] "Matrix"
dim(M)
#> [1] 1850 712
length(M); stopifnot(length(M) == prod(dim(M)))
#> [1] 1317200
nnzero(M) # more relevant than length
#> [1] 8755
## the above are also visible from
str(M)
#> Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
#> ..@ i : int [1:8755] 0 2 25 27 163 165 1258 1261 1276 1278 ...
#> ..@ p : int [1:713] 0 13 17 26 38 43 52 56 61 67 ...
#> ..@ Dim : int [1:2] 1850 712
#> ..@ Dimnames:List of 2
#> .. ..$ : NULL
#> .. ..$ : NULL
#> ..@ x : num [1:8755] 0.277 0.277 0.277 0.277 0.277 ...
#> ..@ factors : list()