实验课2

问题描述:

r语言 mar R语言margin=3是什么意思_方差

编程思想:

本次实验课主要采取apply()函数、which.max()、order()排序等常用函数的调用和功能

apply函数的结构是apply(X,MARGIN,FUN,…)

这里:

  • X是指我们将对其应用操作的数据集(在本例中是矩阵)
  • MARGIN参数允许我们指定是按行还是按列应用操作
  • 行边距=1
  • 列边距=2
  • FUN指的是我们想要在X上“应用”的任何用户定义或内置函数

 让我们看看计算每行平均数、每列之和以及全部的平方的简单示例:

X<-sample((1:10),20, replace = T)
data <- matrix(X,nrow = 5 , ncol = 4)
data
meanrows <- apply(data, 1, mean)
meanrows
sumcols <- apply(data, 2, sum)
sumcols
allsqrt <- apply(data, 1:2, sqrt)
allsqrt

 R语言代码描述

set.seed(1)#设置随机种子
#按照正态分布随机构建一个100*20的矩阵,并且保存小数点后两位小数
m1<-matrix(round(rnorm(2000),2),100,20)
#获取m1矩阵中均值最大的列的位置
which.max(apply(m1,2,mean))
#获取m1矩阵中方差最大的列的位置
which.max(apply(m1,2,var))
#求m1矩阵中的最大数值即获取行最大值和列最大值的位置
#which.max(apply(m1,1,max))#获取m1矩阵中行的最大值的位置
#which.max(apply(m1,2,max))#获取m1矩阵中列的最大值的位置
m1[which.max(apply(m1,1,max)),which.max(apply(m1,2,max))]
#展示出m1矩阵中的最大数值的行和列的位置坐标
list(which.max(apply(m1,1,max)),which.max(apply(m1,2,max)))
#利用max()函数验证m1矩阵最大的数值是否相等
max(m1)
#储存m1矩阵,方便展示
m4<-m1
#求m1矩阵中的第二大数值即将m4矩阵的最大值赋予一个较小的值之后再同理求出最大值
m4[which.max(apply(m4,1,max)),which.max(apply(m4,2,max))]<-0
m4[which.max(apply(m4,1,max)),which.max(apply(m4,2,max))]
#展示出m4矩阵中的最大数值的行和列的位置坐标
list(which.max(apply(m4,1,max)),which.max(apply(m4,2,max)))
max(m4)
# #计算两列的相关性cor()可以直接实现,如果比较每两行的可以对矩阵进行转置再求相关性
# #Way1去求位置
# max(cor(m1)[which(lower.tri(cor(m1))==TRUE)])
# which(cor(m1)==max(cor(m1)[which(lower.tri(cor(m1))==TRUE)]))
# floor(which(cor(m1)==max(cor(m1)[which(lower.tri(cor(m1))==TRUE)]))[1]/20+1)
# which(cor(m1)==max(cor(m1)[which(lower.tri(cor(m1))==TRUE)]))[1]%%20
# arrayInd函数可以实现将向量坐标转化为矩阵坐标
#验证cor(m1)[9,19] #也可以使用cor(m1[,9],m1[,19])
#Way2去求位置
#由于后面需要多次对cor(m1)矩阵进行变动,方便起见可以设置两个对象m2和m3
#cor(m1)函数计算m1矩阵每两列之间的相关性
m2<-cor(m1)
#将m2的上三角矩阵(包括对角线上的元素给予0)
#lower.tri(cor(m1))==F表示上三角矩阵(包括对角线元素)
m2[which(lower.tri(cor(m1))==F)]<-0
#找到相关性最高的两对列
#求相关性最大的一对列的的值
m2[which.max(apply(m2,1,max)),which.max(apply(m2,2,max))]
#展现出相关性最大的一对列的列的行和列
list(which.max(apply(m2,1,max)),which.max(apply(m2,2,max)))
#验证
max(m2)
#求最大的一队列的中位数
m3<-cor(m1)
#将相关性最高的一对列从m3当中提取出来并组合在一起构成新的矩阵x1
x1<-cbind(m3[,which.max(apply(m2,1,max))],m3[,which.max(apply(m2,2,max))])
#计算矩阵x1每列的中位数
y1<-apply(x1,2,median)
#进行判断,根据列的中值进行判断,保留中值较大的那列,在原矩阵m1之中删除较小的一列
if(y1[1]>y1[2]){
  m1<-m1[,-which.max(apply(m2,2,max))]
}else{
  m1<-m1[,-which.max(apply(m2,1,max))]
}
#求相关性第二大的一对列的值
#将第二大的值赋予一个较小的数求第二大的值
m2[which.max(apply(m2,1,max)),which.max(apply(m2,2,max))]<-0
m2[which.max(apply(m1,1,max)),which.max(apply(m1,2,max))]
#展现出相关性第二大的一对列的列的行和列
list(which.max(apply(m2,1,max)),which.max(apply(m2,2,max)))
#验证
max(m2)
#求第二大一堆的列的中位数
#将相关性第二高的一对列从m3当中提取出来并组合在一起构成新的矩阵x2
x2<-cbind(m3[,which.max(apply(m2,1,max))],m3[,which.max(apply(m2,2,max))])
#计算矩阵x2每列的中位数
y2<-apply(x2,2,median)
#进行判断,根据列的中值进行判断,保留中值较大的那列,在原矩阵m1之中删除较小的一列
if(y2[1]>y2[2]){
  m1<-m1[,-which.max(apply(m2,2,max))]
}else{
  m1<-m1[,-which.max(apply(m2,1,max))]
}
#对m1矩阵的各行计算方差
z1<-apply(m1,1,var)
#对行的方差进行排序,去除方差最小的5行
m1<-m1[order(z1,decreasing = F)[-(1:5)],]
m1

结果展示:

最终生成了一个95*18列的矩阵

r语言 mar R语言margin=3是什么意思_方差_02

r语言 mar R语言margin=3是什么意思_方差_03

r语言 mar R语言margin=3是什么意思_中位数_04

r语言 mar R语言margin=3是什么意思_r语言_05

r语言 mar R语言margin=3是什么意思_方差_06