概述
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
吃瓜群众,表示不明白,拆开一点点看
1、大括号内:生成一个数值都是0的3*3矩阵m
> m <- matrix(0,3,3)
> m
[,1] [,2] [,3]
[1,]
0
0
0
[2,]
0
0
0
[3,]
0
0
0
2、将m的对角线数据赋值为1、2、3
> diag(m) <- 1:3
> m
[,1] [,2] [,3]
[1,]
1
0
0
[2,]
0
2
0
[3,]
0
0
3
3、判断等式两边的矩阵数值是否相等
> diag(1:3) == {m <- matrix(0,3,3); diag(m) <- 1:3; m}
[,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
给个例子A看了就更清晰了
> diag(1:3) == {m <- matrix(0,3,3); diag(m) <- 3:5; m}
[,1]
[,2]
[,3]
[1,] FALSE
TRUE
TRUE
[2,]
TRUE FALSE
TRUE
[3,]
TRUE
TRUE FALSE
all() 给定一组逻辑向量,判断所有的值都正确与否,全部相等返回TRUE
> all(diag(1:3) == {m <- matrix(0,3,3); diag(m) <- 3:5; m})
[1] FALSE
> 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.5000000 0.6281205
拆开看看
1、取stats包中的5个随机数并赋值给Y
stats::rnorm
指定使用stats包里的rnorm函数,因为有可能同时多个包里有rnorm函数
> Y = stats::rnorm(5)
> Y
[1]
0.1492229 -0.2466619
1.3518855
0.5641860 -0.1353419
2、合并两个向量
> cbind(X = 1:5, Y = stats::rnorm(5))
X
Y
[1,] 1 -2.5293372
[2,] 2
0.1422790
[3,] 3 -1.8053848
[4,] 4
0.8951704
[5,] 5 -1.5458680
3、将合并后的矩阵赋值给M并取矩阵M的方差
var()求方差
R语言的var计算的是样本方差
> var(M <- cbind(X = 1:5, Y = stats::rnorm(5)))
x
y
x 2.5000000 0.1252164
y 0.1252164 0.8315106
疑问,矩阵的方差?如何计算呢?
> M
x y
[1,] 1 5
[2,] 2 6
[3,] 3 7
> var(M)
x y
x 1 1
y 1 1
4、所以这条语句的意思是取步骤3中矩阵的对角线
> diag(var(M <- cbind(X = 1:5, Y = stats::rnorm(5))))
x
y
2.5000000 0.8315106
例3
> rownames(M) <- c(colnames(M),rep("",3))
> M
x
y
x 1 -0.91441252
y 2
1.52303629
3 -0.41773804
4 -0.01641658
5
0.10574677
1、rep(“”,3) 把”“重复3次
> rep("",3)
[1] "" "" ""
2、colnames(M) 显示M的列名
> colnames(M)
[1] "X" "Y"
3、把M的行命名
> rownames(M) <- c(colnames(M),rep("",3))
> M
x
y
x 1 -0.91441252
y 2
1.52303629
3 -0.41773804
4 -0.01641658
5
0.10574677
最后
以上就是聪慧季节为你收集整理的R函数-diag()的全部内容,希望文章能够帮你解决R函数-diag()所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复