《R语言编程艺术》笔记3--矩阵和数组

矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。所以矩阵和向量一样,有模式的概念。iru数值型和字符型。(但反过来,向量不能看作是只有一列或只有一行的矩阵)

数组(array)是R里更一般的对象,矩阵是数组的一个特殊情形。数组可以是多维的。例如一个三维数组可以包含行、列和层(layer),而一个矩阵只有行和列两个维度。

R的强大之处在于它丰富的矩阵运算。

1.创建矩阵

矩阵的行和列的下标都是从1开始。

方法一:使用matrix()函数创建矩阵

> y<-matrix(c(1,2,3,4),nrow=2,ncol=2)
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> k<-matrix(c(1:10),nrow=5)
> k
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
> #另外一种方法是创建矩阵后,为矩阵的每一个元素赋值
> test<-matrix(nrow=2,ncol=3)
> test[1,]=rep(2,3)
> test[2,]=seq(1,3,1)
> test
     [,1] [,2] [,3]
[1,]    2    2    2
[2,]    1    2    3
> 

2. 一般矩阵运算

包括:线性代数运算、矩阵索引和矩阵元素筛选

2.1 线性代数运算

> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> y%*%y
     [,1] [,2]
[1,]    7   15
[2,]   10   22
> y%*%y # mathematical matrix multiplication
     [,1] [,2]
[1,]    7   15
[2,]   10   22
> 3*y # mathematical multiplication of matrix by scalar
     [,1] [,2]
[1,]    3    9
[2,]    6   12
> 


2.2 矩阵索引

> y
     [,1]
[1,]   NA
[2,]   NA
> y=(1:10)
> y
 [1]  1  2  3  4  5  6  7  8  9 10
> y<-matrix(nrow=2)
> y
     [,1]
[1,]   NA
[2,]   NA
> y=(1:10)
> m=matrix(y,nrow=2)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> m[,2:4]
     [,1] [,2] [,3]
[1,]    3    5    7
[2,]    4    6    8
> m[1:4,]
Error in m[1:4, ] : 下标出界
> m[1,]
[1] 1 3 5 7 9
> m[,2:4]=c(22,22,22,22)
Error in m[, 2:4] = c(22, 22, 22, 22) : 被替换的项目不是替换值长度的倍数
> m[,2:4]=c(22,22,22)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   22   22   22    9
[2,]    2   22   22   22   10
> #向量的负值索引来除掉某些元素,这种操作 同样适用于矩阵
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   22   22   22    9
[2,]    2   22   22   22   10
> m[-1]
[1]  2 22 22 22 22 22 22  9 10
> 

3. 对矩阵的行和列调用函数

3.1 使用apply函数

apply(m,dicode,f,fargs)#m是一个矩阵,dimcode是维度编号,若取值为1代表每一行应用函数,若取值为2代表每一列应用函数。
f是应用在行或列上的函数,fargs 是可选参数集。
> z
     [,1] [,2] [,3]
[1,]    5    8   -3
[2,]    2    5    8
[3,]   -3    2    5
> apply(z,2,mean)
[1] 1.333333 5.000000 3.333333
> apply(z,1,mean)
[1] 3.333333 5.000000 1.333333
> z
     [,1] [,2] [,3]
[1,]    5    8   -3
[2,]    2    5    8
[3,]   -3    2    5
> t(z)  #转置
     [,1] [,2] [,3]
[1,]    5    2   -3
[2,]    8    5    2
[3,]   -3    8    5
> z
     [,1] [,2] [,3]
[1,]    5    8   -3
[2,]    2    5    8
[3,]   -3    2    5

4 增加或删除矩阵的行或列

严格来说,矩阵的长度和维度是固定的,因此不能增加或删除行和列,但是可以给矩阵重新赋值,遮掩个可以得到预期的效果。

4.1 改变矩阵的大小

> x<-z[1,]
> x
[1]  5  8 -3
> x<-c(x,20) #append 20
> x
[1]  5  8 -3 20
> x<-c(x[1:2],520,x[3,4]) #insert 20
Error in x[3, 4] : 量度数目不对
> x<-c(x[1:2],520,x[3:4]) #insert 520
> x
[1]   5   8 520  -3  20
> x<-x[-(length(x)-1),-length(x)]#delete -3 and 20
Error in x[-(length(x) - 1), -length(x)] : 量度数目不对
> x<-x[-(length(x)-1):-length(x)]#delete -3 and 20
> x
[1]   5   8 520
> 
> one=rep(1,4)
> one
[1] 1 1 1 1
> z=rbind(c(1,2,3,4),c(1,1,0,0),c(1,0,1,0))
> z
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    1    0    0
[3,]    1    0    1    0
> z<-t(z)
> z
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    1    0
[3,]    3    0    1
[4,]    4    0    0
> cbind(one,z)
     one      
[1,]   1 1 1 1
[2,]   1 2 1 0
[3,]   1 3 0 1
[4,]   1 4 0 0
> rbind(one,z)
    [,1] [,2] [,3]
one    1    1    1
       1    1    1
       2    1    0
       3    0    1
       4    0    0
Warning message:
In rbind(one, z) :
  number of columns of result is not a multiple of vector length (arg 1)
> 
5. 向量与矩阵的差异
 z=matrix(1:8,nrow=4)
> z
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
> length(z)
[1] 8
> class(z)
[1] "matrix"
> atrributes(z)
错误: 没有"atrributes"这个函数
> atrribute(z)
错误: 没有"atrribute"这个函数
> attributes(z)
$dim
[1] 4 2

> dim(z)
[1] 4 2
> nrow(z)
[1] 4
> ncol(z)
[1] 2
> 
6. 避免意外降维
降维:dimension reduction
> z
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
> r<-z[2,]
> r
[1] 2 6
> attributes(r)
NULL
> $dim
错误: 意外的'$' in "$"
> str(z)
 int [1:4, 1:2] 1 2 3 4 5 6 7 8
> str(r)
 int [1:2] 2 6
> #R禁止自动减少维度
> r<-z[2,drop=F]
> dim(r)
NULL
> r<-z[2,,drop=F]
> r
     [,1] [,2]
[1,]    2    6
> dim(r)
[1] 1 2
> #原本是向量的,可以使用as.matrix函数将其转化为矩阵
> r<-z[2,]
> dim(r)
NULL
> r<-as.matrix(r)
> dim(r)
[1] 2 1
> 

7. 矩阵行和列的命名问题
访问矩阵元素最直接的方法是通过行号和列号,但也可以使用行名和列名。
> z
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
> colnames(z)
NULL
> colnames(z)<-c("a,"b")
错误: unexpected symbol in "colnames(z)<-c("a,"b"
> colnames(z)<-c("a","b")
> z
     a b
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
> 

8.高维数组

arrays















  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言实战笔记第九章介绍了方差分析的内容。方差分析是一种用于比较两个或多个组之间差异的统计方法。在R语言中,可以使用lm函数进行方差分析的回归拟合。lm函数的基本用法是: myfit <- lm(I(Y^(a))~x I(x^2) I(log(x)) var ... [-1],data=dataframe 其中,Y代表因变量,x代表自变量,a代表指数,var代表其他可能对模型有影响的变量。lm函数可以拟合回归模型并提供相关分析结果。 在方差分析中,还需要进行数据诊断,以确保模型的可靠性。其中几个重要的诊断包括异常观测、离群点和高杠杆点。异常观测对于回归分析来说非常重要,可以通过Q-Q图和outlierTest函数来检测。离群点在Q-Q图中表示落在置信区间之外的点,需要删除后重新拟合并再次进行显著性检验。高杠杆点是指在自变量因子空间中的离群点,可以通过帽子统计量来识别。一般来说,帽子统计量高于均的2到3倍即可标记为高杠杆点。 此外,方差分析还需要关注正态性。可以使用car包的qqplot函数绘制Q-Q图,并通过线的位置来判断数据是否服从正态分布。落在置信区间内为优,落在置信区间之外为异常点,需要进行处理。还可以通过绘制学生化残差的直方图和密度图来评估正态性。 综上所述,R语言实战第九章介绍了方差分析及其相关的数据诊断方法,包括异常观测、离群点、高杠杆点和正态性检验。这些方法可以用于分析数据的可靠性和模型的适应性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [R语言实战笔记--第八章 OLS回归分析](https://blog.csdn.net/gdyflxw/article/details/53870535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值