colSums.Rd
Form row and column sums and means for
objects, for sparseMatrix
the result may
optionally be sparse (sparseVector
), too.
Row or column names are kept respectively as for base matrices
and colSums
methods, when the result is
numeric
vector.
colSums(x, na.rm = FALSE, dims = 1L, ...)
rowSums(x, na.rm = FALSE, dims = 1L, ...)
colMeans(x, na.rm = FALSE, dims = 1L, ...)
rowMeans(x, na.rm = FALSE, dims = 1L, ...)
# S4 method for class 'CsparseMatrix'
colSums (x, na.rm = FALSE, dims = 1L,
sparseResult = FALSE, ...)
# S4 method for class 'CsparseMatrix'
rowSums (x, na.rm = FALSE, dims = 1L,
sparseResult = FALSE, ...)
# S4 method for class 'CsparseMatrix'
colMeans(x, na.rm = FALSE, dims = 1L,
sparseResult = FALSE, ...)
# S4 method for class 'CsparseMatrix'
rowMeans(x, na.rm = FALSE, dims = 1L,
sparseResult = FALSE, ...)
a Matrix, i.e., inheriting from Matrix
.
logical. Should missing values (including NaN
)
be omitted from the calculations?
completely ignored by the Matrix
methods.
potentially further arguments, for method <->
generic compatibility.
logical indicating if the result should be sparse,
i.e., inheriting from class sparseVector
. Only
applicable when x
is inheriting from a
sparseMatrix
class.
returns a numeric vector if sparseResult
is FALSE
as per
default. Otherwise, returns a sparseVector
.
dimnames(x)
are only kept (as names(v)
)
when the resulting v
is numeric
, since
sparseVector
s do not have names.
colSums
and the
sparseVector
classes.
(M <- bdiag(Diagonal(2), matrix(1:3, 3,4), diag(3:2))) # 7 x 8
#> 7 x 8 sparse Matrix of class "dgCMatrix"
#>
#> [1,] 1 . . . . . . .
#> [2,] . 1 . . . . . .
#> [3,] . . 1 1 1 1 . .
#> [4,] . . 2 2 2 2 . .
#> [5,] . . 3 3 3 3 . .
#> [6,] . . . . . . 3 .
#> [7,] . . . . . . . 2
colSums(M)
#> [1] 1 1 6 6 6 6 3 2
d <- Diagonal(10, c(0,0,10,0,2,rep(0,5)))
MM <- kronecker(d, M)
dim(MM) # 70 80
#> [1] 70 80
length(MM@x) # 160, but many are '0' ; drop those:
#> [1] 160
MM <- drop0(MM)
length(MM@x) # 32
#> [1] 32
cm <- colSums(MM)
(scm <- colSums(MM, sparseResult = TRUE))
#> sparse vector (nnz/length = 16/80) of class "dsparseVector"
#> [1] . . . . . . . . . . . . . . . . 10 10 60 60 60 60 30 20 .
#> [26] . . . . . . . 2 2 12 12 12 12 6 4 . . . . . . . . . .
#> [51] . . . . . . . . . . . . . . . . . . . . . . . . .
#> [76] . . . . .
stopifnot(is(scm, "sparseVector"),
identical(cm, as.numeric(scm)))
rowSums (MM, sparseResult = TRUE) # 14 of 70 are not zero
#> sparse vector (nnz/length = 14/70) of class "dsparseVector"
#> [1] . . . . . . . . . . . . . . 10 10 40 80 120
#> [20] 30 20 . . . . . . . 2 2 8 16 24 6 4 . . .
#> [39] . . . . . . . . . . . . . . . . . . .
#> [58] . . . . . . . . . . . . .
colMeans(MM, sparseResult = TRUE) # 16 of 80 are not zero
#> sparse vector (nnz/length = 16/80) of class "dsparseVector"
#> [1] . . . . . .
#> [7] . . . . . .
#> [13] . . . . 0.14285714 0.14285714
#> [19] 0.85714286 0.85714286 0.85714286 0.85714286 0.42857143 0.28571429
#> [25] . . . . . .
#> [31] . . 0.02857143 0.02857143 0.17142857 0.17142857
#> [37] 0.17142857 0.17142857 0.08571429 0.05714286 . .
#> [43] . . . . . .
#> [49] . . . . . .
#> [55] . . . . . .
#> [61] . . . . . .
#> [67] . . . . . .
#> [73] . . . . . .
#> [79] . .
## Since we have no 'NA's, these two are equivalent :
stopifnot(identical(rowMeans(MM, sparseResult = TRUE),
rowMeans(MM, sparseResult = TRUE, na.rm = TRUE)),
rowMeans(Diagonal(16)) == 1/16,
colSums(Diagonal(7)) == 1)
## dimnames(x) --> names( <value> ) :
dimnames(M) <- list(paste0("r", 1:7), paste0("V",1:8))
M
#> 7 x 8 sparse Matrix of class "dgCMatrix"
#> V1 V2 V3 V4 V5 V6 V7 V8
#> r1 1 . . . . . . .
#> r2 . 1 . . . . . .
#> r3 . . 1 1 1 1 . .
#> r4 . . 2 2 2 2 . .
#> r5 . . 3 3 3 3 . .
#> r6 . . . . . . 3 .
#> r7 . . . . . . . 2
colSums(M)
#> V1 V2 V3 V4 V5 V6 V7 V8
#> 1 1 6 6 6 6 3 2
rowMeans(M)
#> r1 r2 r3 r4 r5 r6 r7
#> 0.125 0.125 0.500 1.000 1.500 0.375 0.250
## Assertions :
stopifnot(exprs = {
all.equal(colSums(M),
structure(c(1,1,6,6,6,6,3,2), names = colnames(M)))
all.equal(rowMeans(M),
structure(c(1,1,4,8,12,3,2)/8, names = paste0("r", 1:7)))
})