要建立一個數組,首先需要一個維數向量dim來描述其維數屬性. dim 是由一個或多個非負整數組成的向量,所有非負整數的乘積等於數組的長度。一個向量只有定義其維數以后才能成為一個數組,例如:
x<-c(1:10) is.array(x)#檢驗x是不是數組 is.vector(x)#查看其是不是一個向量 dim(x)<-8#定義誰數后成為數組 dim(x)<-10#定義誰數后成為數組,且長度要與向量長度一樣 is.array(x)#檢驗x是不是數組
結果:
注意:若dim(x)<-8,這個所賦的值已經小於向量的長度,系統會報錯為下所示
Error in dim(x) <- 8 :
dims [product 8] do not match the length of object [10]
dim(x)#查看x的數組長度
矩陣的建立:
由於矩陣具有特殊性,R語言中往往利用函數matrix()建立矩陣,利用函數diag()建立對角矩陣.函數matrix()的調用格式為:
matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames= NULL)
其中,data 為給定的數據向量;nrow為矩陣的行數;ncol為矩陣的列數;;byrow 為邏輯參數,默認狀態為FALSE,即按列填充數據; dimnames 為矩陣維數的名稱,默認時為空。例如
mat<-matrix(1:12,nrow=4,ncol=3,byrow=T);mat
diag(4)#創建一個4階的單位矩陣
z<-c(1,2,3,4)#創建一個主對角線上的元素為z向量上的這些元素的矩陣 diag(z)#創建矩陣
mat[2,3]#查看矩陣第二行第三列的元素 diag(z)[,3]#查看矩陣z的第三列元素 diag(z)[1,]#查看矩陣z的第一行上的元素 diag(z)[-1,]#去除矩陣z的第一行元素 mat[1,3]<-99;mat#替換第一行第三列位置上的元素
mat[1+1,]#第一行元素+1
t(mat)#轉置
mat1<-cbind(mat,x);mat1#按列合並矩陣
mat2<-rbind(mat,x);mat2#按行合並矩陣
diag(mat2)#查看矩陣主對角線上的元素
d<-matrix(c(1,3,6,9),nrow=2,ncol=2);d#建一個方陣
det(d)#計算方陣的行列式值
矩陣的代數乘積:矩陣A和B的代數乘積A%*%B只有在A的列數與矩陣B的行數相同的條件下才能夠進行運算.。
矩陣A和B的交叉乘積:
矩陣(向量)的外積
線性方程組的求解
矩陣的特征值與特征向量
矩陣的奇異值分解
d1<-matrix(1:12,nrow =3,ncol=4,byrow=T);d1#創建矩陣 mat2%*%d1#兩個矩陣的乘積 x1<-matrix(c(1,6,8,9),nrow=2,ncol=2,byrow=T);x1#創建矩陣 x2<-matrix(c(3,5,9,4),nrow=2,ncol=2,byrow=T);x2#創建矩陣 crossprod(x1,x2)#內積 x<-1:4;x y<-1:3;y outer(x,y,"+")#外積 outer(x,y)#外積 x3<-matrix(c(1,5,3,4),nrow=2,ncol=2,byrow=T);x3#矩陣 X<-solve(x2,x3);X#求出X的值 solve(x2)#由於矩陣x2可逆,則命令solve(x2)返回矩陣x2的逆矩陣
x2%*%solve(x2)#證明solve(x2)是x2的逆矩陣
sv<-eigen(x2);sv#特征值與特征向量
a1<-matrix(c(-1,2,3,1,0,3,-2,1,4,0,3,2),nrow=3,ncol=4,byrow=T);a1 b1<-matrix(c(4,3,2,-1,5,-3,0,1,1,2,-5,0),nrow=3,ncol=4,byrow=T);b1 3*a1-2*b1#3a1-2b1的值 A<-matrix(c(3,-1,2,0,1,5,7,9,2,4,6,8),nrow=3,ncol = 4,byrow = T);A B<-matrix(c(7,5,-2,4,5,1,9,7,3,2,-1,6),nrow=3,ncol=4,byrow=T);B x<-((B-A)/2);x#求解A-2X=B的值 C<-matrix(1:12,nrow=3,ncol=4,byrow=T);C svd(C)#求出其的奇異值
函數max(、min()、median(、 sumO、mean(、 sd0分別返回矩陣所有元素的最大值、最小值、中位數、和、均值以及標准差; var(A)返 回矩陣A的各列的協方差陣; cov(A,B)和cor(A,B)分別返回矩陣A和矩陣B的各列的協方差陣和相關系數陣,由定義cov(a,a)=var(a)。
函數cumsum(、cumprod0、 cummax(、 cummin0分別返回矩陣的(按列)累積求和、累積乘積、累積最大值以及累積最小值向量。
函數max(、min(、 median(、sum()、mean(、 sd0只針對矩陣所有元素計算,若針對每一行或每一列進行 上述計算,可以利用命令apply0),其調用格式為:
apply(X, MARGIN, FUN)
其中,X為矩陣或數組; FUN為上述函數;當X為矩陣時,參數MARGIN=1,表示按行計算,MARGIN=2,表示按列計算,當X為三維數組時,MARGIN=c(1, 2)表示按行列進行等,另外,函數dim()、 nrow()以及ncol()可以分別得到矩陣的維數、行數和列數,rownames()、colnames()給矩陣分別添加行名和列名; dimnames()返回矩陣的行名和列名。
.