Extract or replace the diagonal of a matrix, or construct a diagonal matrix.
a matrix, vector or 1D array, or missing.
Optional dimensions for the result when
either a single value or a vector of length equal to that
of the current diagonal. Should be of a mode which can be coerced
to that of
diag has four distinct usages:
x is a matrix, when it extracts the diagonal.
x is missing and
nrow is specified, it returns
an identity matrix.
x is a scalar (length-one vector) and the only
argument, it returns a square identity matrix of size given by the scalar.
x is a numeric vector, either of length at least 2 or there
were further arguments. This returns a matrix with the given
diagonal and zero off-diagonal entries.
It is an error to specify
ncol in the first case.
x is a matrix then
diag(x) returns the diagonal of
x. The resulting vector will have
names if the
x has matching column and rownames.
The replacement form sets the diagonal of the matrix
x to the
In all other cases the value is a diagonal matrix with
ncol columns (if
ncol is not given the matrix
is square). Here
nrow is taken from the argument if specified,
otherwise inferred from
x: if that is a vector (or 1D array) of
length two or more, then its length is the number of rows, but if it
is of length one and neither
ncol is specified,
nrow = as.integer(x).
When a diagonal matrix is returned, the diagonal elements are one
except in the fourth case, when
x gives the diagonal elements:
it will be recycled or truncated as needed, but fractional recycling
and truncation will give a warning.
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.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
1 2 3 4 5 6 7 8 9 10