目录
一、矩阵
1.1 建立矩阵
1.2 认识矩阵的属性
1.3 将向量组成矩阵
二、取得矩阵元素的值
2.1 矩阵元素的取得
2.2 使用负索引取得矩阵元素
三、修改矩阵的元素值
四、降低矩阵的维度
五、矩阵的行名和列名
5.1 取得和修改矩阵对象的行名和列名
5.2 dimnames()函数
六、将行名或列名作为索引
七、矩阵的运算
7.1 矩阵与一般常数的四则运算
7.2 行和列的计算
7.3 转置矩阵
7.4 %*%矩阵相乘
7.5 diag()函数
7.6 solve()函数
7.7 det()函数
八、三维或高维数组
8.1建立三维数组
8.2 idential()函数
8.3 取得三维数组的元素
九、再谈class()函数
一、矩阵
1.1 建立矩阵
建立矩阵可使用matrix()函数,格式如下:
matrix(data,nrow=,ncol=,byrow=logical,dimnames=NULL)
data:数据。
nrow:预计行的数量。
ncol:预计列的数量。
byrow:逻辑值,预设是FALSE,表示先按列填数据,第1列填满再填第2列,其他依此类推,因此,若先先列则可省略此参数。如果该值是TRUE则按行填数据,即第1行填满再填第2行,其他依此类推。
dimnames:矩阵的属性,即行名和列名。
1.2 认识矩阵的属性
str()函数可以查看矩阵对象的结构。
使用nrow()函数可以得到矩阵的行数。
使用ncol()函数可以得到矩阵的列数。
使用dim()函数可以得到矩阵对象的行数和列数。
此外,length()函数也可以用于取得矩阵或三维数组或多维数组对象的元素个数。
is.matrix()函数而可用于检查对象是否是矩阵。
is.array()函数可用于检查对象是都是数组。
1.3 将向量组成矩阵
R语言提供的rbind()函数可将两个或多个向量组成矩阵,每个向量各自占用一行。
cbind()函数可将两个或多个向量组成矩阵,功能类似于rbind()。不过,它是以每个向量各占一列的方式来组织向量的。
二、取得矩阵元素的值
2.1 矩阵元素的取得
当某一索引被省略时,则代表该维度的行或列均必须被计算在内。
2.2 使用负索引取得矩阵元素
对于矩阵,使用负索引,相当于拿掉负索引所指的行或列。
三、修改矩阵的元素值
四、降低矩阵的维度
使用负索引取得矩阵的部分元素时,如果所取得的部分元素仅有一行或一列,那么R语言将自动降低对象维度,使其从矩阵对象变向量对象。
其实,如果舍弃一个矩阵对象的某个元素,那么整个矩阵对象也将降为向量对象。
假设有数行或数列的矩阵,其部分元素被舍弃,只剩一行或一列时,如果仍希望此对象以矩阵方式呈现,可增加“drop=FALSE"参数。
五、矩阵的行名和列名
下面的矩阵没有行名和列名。
5.1 取得和修改矩阵对象的行名和列名
rownames()函数可以取得和修改矩阵对象的行名。
colnames()函数可以取得和修改矩阵对象的列名。
如果我们想要把整个列名或行名删除,那么只要将整个列名或行名设为NULL即可。
5.2 dimnames()函数
行名和列名事实上是存在于dimnames的属性种,去哦们可以使用dimnames()函数取得和修改这个属性值。
六、将行名或列名作为索引
R语言的重要特色是,当一个矩阵有了行名和列名后,可以用这些名称来代替数字型的索引,取得矩阵对象的元素,让整个程序的可读性更高。
七、矩阵的运算
7.1 矩阵与一般常数的四则运算
当碰上矩阵对象与一般常数的运算时,只要将各个元素与该常数分别执行运算即可。
两个矩阵能进行四则运算的先决条件是它们彼此的维度相同,否则会出现错误信息。有意思的是,R语言是允许矩阵对象和向量对象相加的,只要矩阵的行数与向量长度相同即可。
如果矩阵的列数与向量长度相同,也可以进行加法运算,但一般不常用。
注:
乘号是对单一元素逐步操作的,如果是要计算矩阵的内积,则需使用另一个特殊的矩阵相乘符号。
7.2 行和列的计算
rowSums():计算行种元素的总和。
colSums():计算列种元素的总和。
rowMeans():计算行中元素的平均值。
colMeans():计算列中元素的平均值。
7.3 转置矩阵
t()函数可执行矩阵转置,转置矩阵后,矩阵的行列元素将互相对调。
7.4 %*%矩阵相乘
矩阵对象相乘的运算基本上和数学矩阵相乘是一样的。
7.5 diag()函数
diag()函数很灵活,当第一个参数是矩阵时,可传回对角线的向量值。
diag()函数的另一个用法是传回矩阵,此矩阵对角线是使用第一个参数的向量值,其余填0。该命令格式如下所示。
diag(x,nrow,ncol)
其中x是向量,nrow是矩阵行数,ncol是矩阵列数。若省略nrow和ncol,则用x向量元素个数(假设是n)建立n行n列矩阵。
7.6 solve()函数
使用solve()这个函数可传回反矩阵,使用这个函数时要小心,有时会碰上小数被舍弃的问题。
7.7 det()函数
det是指数学中的行列式,这个函数可以计算矩阵的行列式值。
八、三维或高维数组
8.1建立三维数组
array()函数可用于建立三维数组。
我们也可以使用dim()函数建立三维数组,方法是将一个向量,利用dim()函数转成三维数组。
8.2 idential()函数
identical()函数主要用于比较两个对象是否完全相同。
8.3 取得三维数组的元素
由上述结果可以发现,初始first.3array为数组对象,经筛选后,变成矩阵。如果期待筛选完,对象仍是三维数组,那么可加上参数“drop=FALSE"。
降维后,第1个表格的数据以列优先方式先填充,第2个表格再依次填充。
九、再谈class()函数
如果class()函数放入的参数是变量(例如矩阵)的特定元素,则将显示该元素的数据类型。