R语言矩阵的创建、访问修改、基本运算

R语言拥有许多用于存储数据的对象类型,从结构角度来看包括向量(vector)、矩阵(matrix)、数组(array)、数据框(data frame)、因子(factor)、列表(list)。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位、访问、添加、删除其中个别元素等方面均有所不同。本文将主要讲解矩阵的创建、访问以及基本运算,若需了解其他数据类型相关操作,欢迎感兴趣的朋友访问个人主页,或点击上文蓝字链接跳转至相关文章。

在R语言中,矩阵(matrix)是将数据按行和列组织数据的一种数据对象,是一个二维数组,和向量类似,每个元素都拥有相同的模式(数值型、字符型或逻辑型)。通常用列来表示来自不同变量的数据,用行来表示相同的数据。当维度超过2时,应该考虑使用数组(array);当有多种模式的数据时,可以使用数据框(data frame)。

1、矩阵的创建

在本人的日常操作中,矩阵的创建大概涉及3中方法:

  • 一是使用matrix函数;
  • 二是使用rbindcbind函数;
  • 三是使用dim也可以创建。

而前两种方式使用居多,以下是具体的代码实现:

# 使用matrix函数
a <- matrix(1:12,nrow = 3,ncol = 4) #3行4列,默认按照列排列
a
rowname <- c("r1","r2","r3")
colname <- c("c1","c2","c3","c4") 
a <- matrix(1:12,nrow = 3,ncol = 4,byrow = TRUE, #按行排列
            dimnames = list(rowname,colname)) #添加行名列名
a 

rownames(a) = c("r1","r2","r3") #创建之后再添加行列名,添加行名
colnames(a) = c("c1","c2","c3","c4") #添加列名
a
is.matrix(a) #判断是否是矩阵
help("matrix") #更多细节请查看

#应用rbind和cbind函数合并
help("rbind")
a <- c(1:4)
b <- c(5:8)
d <- rbind(a,b) #按行合并
d
e <- cbind(a,b) #按列合并
e

#使用dim函数
a <- 1:6
dim(a) <- c(2,3) #2行3列
a

2、矩阵的访问和修改

相比于之前介绍的向量,矩阵的访问方式类似,但是本人目前经常使用的只有如下一种:按照元素位置索引。

a <- matrix(1:12,nrow = 3,ncol = 4)
a
a[1,2] <- 100 #元素的修改,修改和访问类似,下面主要实现访问
a
a[1,2] #第1行第2列元素
a[2,] #第2行元素
a[,2] #第2列元素
a[1,c(2,4)] #第1行,第2,4列元素
a[1,2:4] #第1行,第2,3,4列元素
a[1:2,2:4] #第1,2行,第2,3,4列元素

3、矩阵的基本运算

相比于之前介绍的向量,矩阵的运算方式更多,与本科的线性代数结合较多,下面的常见的一些基本运算:

a <- matrix(1:4,2,2)
a
b <- matrix(5:8,2,2)
b
a+b #对应元素相加
a-b #对应元素相减
a*b #对应元素相乘,注:矩阵乘法在乘号两侧使用百分号
a/b ##对应元素相除
t(a) #矩阵的转置
det(a) #求行列式
qr(a)$rank #求矩阵的秩
d <- eigen(a)
d$values #特征值
d$vectors #特征向量

solve(a) #矩阵求逆a
b = matrix(1:2,2,1)
solve(a,b) #求解a*x=b

max(a) #矩阵最大值
min(a) #矩阵最小值
nrow(a) #矩阵行数
ncol(a) #矩阵列数

apply(a,MARGIN = 1,sum) #计算每一行和
apply(a,MARGIN = 2,sum) #计算每一列和
apply(a,MARGIN = 1,mean) #计算每一行均值,根据需要改变后面的函数方法