diag                  package:base                  R Documentation

Matrix Diagonals

Description:

     Extract or replace the diagonal of a matrix, or construct a
     diagonal matrix.

Usage:

     diag(x = 1, nrow, ncol)
     diag(x) <- value

Arguments:

       x: a matrix, vector or 1D array.

nrow, ncol: Optional dimensions for the result.

Value:

     If `x' is a matrix then `diag(x)' returns the diagonal of `x'. 
     The resulting vector will have `names' if the matrix `x' has
     matching column and row names.

     If `x' is a vector (or 1D array) of length two or more, then
     `diag(x)' returns a diagonal matrix whose diagonal is `x'.

     If `x' is a vector of length one then `diag(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).

Note:

     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.

See Also:

     `matrix'.

Examples:

     dim(diag(3))
     diag(10,3,4) # guess what?
     all(diag(1:3) == {m <- matrix(0,3,3); diag(m) <- 1:3; m})

     diag(var(M <- cbind(X=1:5, Y=rnorm(5))))#-> vector with names "X" and "Y"
     rownames(M) <- c(colnames(M),rep("",3));
     M; diag(M) #  named as well

