附录E R中的矩阵运算

本书中介绍的很多函数都是操作矩阵的。对矩阵的操作已经深深地扎根于R语言中。表E-1中介绍了对解决线性代数问题非常重要的运算符和函数。在表E-1中,AB是矩阵,xb是向量,k是标量。 表E-1 用于矩阵代数的R函数和运算符

运算符或函数 描  述
+ - * / ^ 分别是逐个元素的加、减、乘、除和幂运算
A %*% B 矩阵乘法
A %o% B 外积。AB'
cbind(A, B, …) 横向合并矩阵或向量
chol(A) A的Choleski分解。若R <- chol(A),那么chol(A)包含上三角因子,即R'R=A
colMeans(A) 返回A的列均值组成的向量
crossprod(A) A'A
crossprod(A, B) A'B
colSums(A) 返回A的列总和组成的向量
diag(A) 返回主对角元素组成的向量
diag(x) x中元素作为主对角元素创建对角矩阵
diag(k) 如果k是标量,就创建k × k的单位矩阵
eigen(A) A的特征值和特征向量。若y <- eigen(A),那么: y$valA的特征值; y$vecA的特征向量
ginv(A) A的Moore-Penrose广义逆(需要MASS包)
qr(A) A的QR分解。若y <- qr(A),那么 y$qr的上三角是分解结果,下三角是分解的信息,y$rankA的秩,y$qraux是Q的附加信息向量,y$pivot是所使用的主元素选择策略
rbind(A, B, …) 纵向合并矩阵或向量
rowMeans(A) 返回A的行均值组成的向量
rowSums(A) 返回A的行总和组成的向量
solve(A) A的逆,其中A是方矩阵
solve(A, b) 求解方程b = Ax中的向量x
Svd(A) A的奇异值分解。若y <- svd(A),那么y$dA的奇异值组成的向量,y$u是矩阵且每一列都是A的左奇异向量,y$v是矩阵且每一列都是A的右奇异向量
t(A) A的转置

还有几个用户贡献的用于矩阵代数的包。matlab包中的包装器函数和变量尽可能模拟MATLAB的函数调用。这些函数可用于将MATLAB程序和代码移植到R。还有一个将MATLAB命令转换成R命令的速查卡(http://mathesaurus.sourceforge.net/octave-r.html)。

Matrix包中的函数使得R可以处理高密度矩阵或稀疏矩阵。可以高效的访问BLAS(Basic Linear Algebra Subroutines)、Lapack (密集矩阵)、TAUCS(稀疏矩阵)和UMFPACK(稀疏 矩阵)。

最后是matrixStats包,其中提供了操作矩阵中行和列的方法,包括计数、求和、乘积、居中趋势(central tendency)、离散度等的计算函数。这里的每一个方法都在速度和内存效率上做了优化。