Sparse Matrix diagonals
diag.RdExtract or replace the diagonal of a matrix, or construct a diagonal matrix.
Usage
## diag(x)
## diag(x=1, nrow, ncol, names = TRUE)
diag(x) <- value
diag.spam(x=1, nrow, ncol)
spam_diag(x=1, nrow, ncol)
diag.spam(x) <- valueValue
If x is a spam matrix then diag(x) returns the diagonal of x.
The assignment form sets the diagonal of the sparse matrix x to the
given value(s).
diag.spam works as diag for spam matrices:
If x is a vector (or 1D array) of length two or more, then
diag.spam(x) returns a diagonal matrix whose diagonal is
x.
spam_diag is an alias for diag.spam and in the spirit
of the result of diag is a spam object.
If x is a vector of length one then diag.spam(x) returns an
identity matrix of order the nearest integer to x. The
dimension of the returned matrix can be specified by nrow and
ncol (the default is square).
The assignment form sets the diagonal of the matrix x to the
given value(s).
Details
Using diag(x) can have unexpected effects if x is a vector
that could be of length one. Use diag(x, nrow = length(x)) for
consistent behaviour.
Examples
diag.spam(2, 4) # 2*I4
#> [,1] [,2] [,3] [,4]
#> [1,] 2 0 0 0
#> [2,] 0 2 0 0
#> [3,] 0 0 2 0
#> [4,] 0 0 0 2
#> Class 'spam' (32-bit)
smat <- diag.spam(1:5)
diag( smat)
#> [1] 1 2 3 4 5
diag( smat) <- 5:1
# The last line is equivalent to
diag.spam( smat) <- 5:1
# Note that diag.spam( 1:5) <- 5:1 not work of course.