Создание матриц идентичности в R

Я хотел бы создать идентификационные матрицы разных размеров, и я могу сделать это в меньшем масштабе, например:

> x <- matrix(cbind(c(1,0), c(0,1)), 2)
> x
     [,1] [,2]
[1,]    1    0
[2,]    0    1

И вот так:

> y <- matrix(cbind(c(1,0,0), c(0,1,0), c(0,0,1)), 3)
> y
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

Однако, похоже, это станет все более утомительным по мере увеличения размеров матриц.

enter image description here

Существует ли более простой способ создания n-значных матриц идентичности?

Ответы

Ответ 1

одно (два) использования для diag, когда указано nrow или когда x - вектор длины один, вы получаете идентификационную матрицу

diag(5)
diag(nrow = 5)

или вы можете создать матрицу из 0s и заполнить диагональ:

mat <- matrix(0, 5, 5)
diag(mat) <- 1

## or shorter:
`diag<-`(matrix(0, 5, 5), 1)

Все это дает мне:

#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    0    0    0    0
# [2,]    0    1    0    0    0
# [3,]    0    0    1    0    0
# [4,]    0    0    0    1    0
# [5,]    0    0    0    0    1