1.拉直
a <- matrix(1:10, ncol = 2, byrow = T)
a
matrix(a, ncol = 1)
2.apply
apply(X, MARGIN, FUN, ...)
其中X为一个数组,MARGIN是固定哪些维不变,FUN是用来计算的函数。例如,设a是n*m 矩阵,则apply(a, 1, sum)
的意义是对a的各行求和(保留第一维即第一个下标不变),结果是一个长度为n的向量(与第一维长度相同),而apply(a, 2, sum)
意义是对a的各列求和,结果是一个长度为m的向量(与第二维长度相同)
a=cbind(c(4,9,1),c(3,7,2))
apply(a,1,sort )
3.外积
两个数组a和b的外积是由a的每一个元素与b的每一个元素搭配在一起相乘得到一个新元素,这样得到一个维数向量等于a的维数向量与b的维数向量连起来的数组,
即若d为a和b的外积,则dim(d)=c(dim(a), dim(b))
。
a和b的外积记作 a %o% b
。如 d <- a %o% b
也可以写成一个函数调用的形式: d <- outer(a, b, '*')
注意outer(a, b, f)
是一个一般性的外积函数,它可以把a
的任一个元素与b的任意一个元素搭配起来作为f的自变量计算得到新的元素值,外积是两个元素相乘的情况。函数当然也可以是加、减、除,或其它一般函数。当函数为乘积时可以省略不写。
例如,我们希望计算函数 在一个x和y的网格上的值用来绘制三维曲面图,可以用如下方法生成网格及函数值:
例子1:
x <- seq(-2, 2, length=20)
y <- seq(-pi, pi, length=20)
f <- function(x, y) cos(y)/(1+x^2)
z <- outer(x, y, f)
persp(x,y,z)
例子2:
考虑简单的2×2矩阵 ,其元素均在0,1,…,9中取值。假设四个元素 a, b, c, d都是相互独立的服从离散均匀分布的随机变量,我们设法求矩阵行列式 ad-bc的分布。首先,随机变量 ad和 bc同分布,它的取值由以下外积矩阵给出,每一个取值的概率均为1/100:
x <- outer(0:9, 0:9);x
这个语句产生一个外积矩阵。为了计算 ad的100个值(有重复)与 bc的100个值相减得到的10000个结果,可以使用如下外积函数:
y<- outer(x, x, "-");y[1,1,,]
这样得到一个维数向量为c(10,10,10,10)的四维数组,每一个元素为行列式的一个可能取值,概率为万分之一。因为这些取值中有很多重复,我们可以用一个table()函数来计算每一个值的出现次数(频数):
f <- table(y);f[1:10]
plot(as.numeric(names(f)), f, type="h",xlab="行列式值",ylab="频数")
其中as.numeric()
把向量f中的元素名又转换成了数值型,用来作为作图的横轴坐标,f 中的元素值即频数作为纵轴,type="h"
表示是画垂线型图。