【转】R函数-diag()函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lili_wuwu/article/details/51909229


diag()提取或替换一个矩阵的对角线,或构造一个对角矩阵。
语法:
diag(x = 1, nrow, ncol)
diag(x) <- value
解析:
x:一个矩阵,向量或一维数组,或不填写。
nrow, ncol:可选 行列。
value :对角线的值,可以是一个值或一个向量。

例子

> x <- matrix(1:16,nrow=4,ncol=4)
> x
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> diag(x)
[1]  1  6 11 16

#展示x的对角线数据

> diag(diag(x))
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    6    0    0
[3,]    0    0   11    0
[4,]    0    0    0   16

#由x的对角线数据生成对角矩阵

 

> diag(4)
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]    0    0    1    0
[4,]    0    0    0    1

#对角线为4个元素每个元素默认为1的对角矩阵

 

> diag(10,3,4)
     [,1] [,2] [,3] [,4]
[1,]   10    0    0    0
[2,]    0   10    0    0
[3,]    0    0   10    0

#对角线数据位10,三行四列的矩阵

> a<-diag(4)+1
> a
     [,1] [,2] [,3] [,4]
[1,]    2    1    1    1
[2,]    1    2    1    1
[3,]    1    1    2    1
[4,]    1    1    1    2

  

看几个较复杂的例子
例1

> all(diag(1:3) == {m <- matrix(0,3,3); diag(m) <- 1:3; m})
[1] TRUE

 

例2

> diag(var(M <- cbind(X = 1:5, Y = stats::rnorm(5))))
       X        Y 
2.500000 0.472455 

  

例3

> rownames(M) <- c(colnames(M),rep("",3))
> M
  X         Y
X 1  0.337440
Y 2  0.129876
  3  1.251390
  4 -0.382447
  5 -0.451144

 

版权声明:本文为CSDN博主「lili_wuwu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lili_wuwu/article/details/51909229

posted @ 2019-09-11 00:08  从前有座山,山上  阅读(3164)  评论(0编辑  收藏  举报