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)

Arguments

x

an R object, typically inheriting from class Matrix or numeric.

na.counted

a logical describing how NAs should be counted. There are three possible settings for na.counted:

TRUE

NAs are counted as non-zero (since “they are not zero”).

NA

(default)the result will be NA if there are NA's in x (since “NA's are not known, i.e., may be zero”).

FALSE

NAs are omitted from x before the non-zero entries are counted.

For sparse matrices, you may often want to use na.counted = TRUE.

Methods

signature(x = "ANY")

the default method for non-Matrix class objects, simply counts the number 0s 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.

Value

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

See also

The Matrix class also has a length method; typically, length(M) is much larger than nnzero(M) for a sparse matrix M, and the latter is a better indication of the size of M.

drop0, zapsmall.

Examples

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