diag {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` 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 `x`.

### 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.

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

`upper.tri`, `lower.tri`, `matrix`.

### Examples

```require(stats)
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
```

[Package base version 2.2.1 Index]