dimScale.Rd
dimScale
, rowScale
, and colScale
implement
D1 %*% x %*% D2
, D %*% x
, and x %*% D
for diagonal matrices D1
, D2
, and D
with
diagonal entries d1
, d2
, and d
, respectively.
Unlike the explicit products, these functions preserve dimnames(x)
and symmetry where appropriate.
a matrix, possibly inheriting from virtual class
Matrix
.
numeric vectors giving factors by which to scale
the rows or columns of x
; they are recycled as necessary.
dimScale(x)
(with d1
and d2
unset) is only
roughly equivalent to cov2cor(x)
. cov2cor
sets the diagonal entries of the result to 1 (exactly);
dimScale
does not.
The result of scaling x
, currently always inheriting from
virtual class dMatrix
.
It inherits from triangularMatrix
if and only
if x
does. In the special case of dimScale(x, d1, d2)
with identical d1
and d2
, it inherits from
symmetricMatrix
if and only if x
does.
n <- 6L
(x <- forceSymmetric(matrix(1, n, n)))
#> 6 x 6 Matrix of class "dsyMatrix"
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1 1 1 1 1 1
#> [2,] 1 1 1 1 1 1
#> [3,] 1 1 1 1 1 1
#> [4,] 1 1 1 1 1 1
#> [5,] 1 1 1 1 1 1
#> [6,] 1 1 1 1 1 1
dimnames(x) <- rep.int(list(letters[seq_len(n)]), 2L)
d <- seq_len(n)
(D <- Diagonal(x = d))
#> 6 x 6 diagonal matrix of class "ddiMatrix"
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1 . . . . .
#> [2,] . 2 . . . .
#> [3,] . . 3 . . .
#> [4,] . . . 4 . .
#> [5,] . . . . 5 .
#> [6,] . . . . . 6
(scx <- dimScale(x, d)) # symmetry and 'dimnames' kept
#> 6 x 6 Matrix of class "dsyMatrix"
#> a b c d e f
#> a 1 2 3 4 5 6
#> b 2 4 6 8 10 12
#> c 3 6 9 12 15 18
#> d 4 8 12 16 20 24
#> e 5 10 15 20 25 30
#> f 6 12 18 24 30 36
(mmx <- D %*% x %*% D) # symmetry and 'dimnames' lost
#> 6 x 6 Matrix of class "dgeMatrix"
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1 2 3 4 5 6
#> [2,] 2 4 6 8 10 12
#> [3,] 3 6 9 12 15 18
#> [4,] 4 8 12 16 20 24
#> [5,] 5 10 15 20 25 30
#> [6,] 6 12 18 24 30 36
stopifnot(identical(unname(as(scx, "generalMatrix")), mmx))
rowScale(x, d)
#> 6 x 6 Matrix of class "dgeMatrix"
#> a b c d e f
#> a 1 1 1 1 1 1
#> b 2 2 2 2 2 2
#> c 3 3 3 3 3 3
#> d 4 4 4 4 4 4
#> e 5 5 5 5 5 5
#> f 6 6 6 6 6 6
colScale(x, d)
#> 6 x 6 Matrix of class "dgeMatrix"
#> a b c d e f
#> a 1 2 3 4 5 6
#> b 1 2 3 4 5 6
#> c 1 2 3 4 5 6
#> d 1 2 3 4 5 6
#> e 1 2 3 4 5 6
#> f 1 2 3 4 5 6