




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
R向量、多維數(shù)組和矩陣1、數(shù)據(jù)表示2、應(yīng)用實例3、實驗練習(xí)實驗內(nèi)容實驗?zāi)康膶W(xué)習(xí)R中向量、多維數(shù)組和矩陣的表示方法常量
常量為:數(shù)值型、邏輯型和字符型三種,其中數(shù)值型數(shù)據(jù)如:123,123.45,1.2345e30字符型如:“Weight”,“李明”是字符型;邏輯真值寫為T或TRUE(注意區(qū)分大小寫,寫t或true都沒意義),邏輯假值寫為F或FALSE。復(fù)數(shù)常量就用3.5-2.1i這樣的寫法表示。R中的數(shù)據(jù)可以取缺失值,用符號NA代表缺失值。函數(shù)is.na(x)返回x是否缺失值(返回值T或F)。向量(Vector)與賦值
向量是有相同基本類型的元素序列,即一維數(shù)組定義向量的最常用辦法是使用函數(shù)c(),它把若干個數(shù)值或字符串組合為一個向量,比如:>x<-c(1:3,10:13)
>x
[1]12310111213
R中用符號“<-”、“=”來為變量賦值。另一種賦值的辦法是用assign函數(shù),比如>x1=c(1,2)和>assign(“x1”,c(1,2))相同函數(shù)length(x)可以計算向量x的長度。向量運算
可以對向量進行加(+)減(-)乘(*)除(/)、乘方(^)運算,其含意是對向量的每一個元素進行運算。例如:
>x<-c(1,4,6.25)>y=x*2+1>y
[1]3.09.013.5
%/%表示整數(shù)除法(比如5%/%3為1),
%%表示求余數(shù)(如5%%3為2)??梢杂孟蛄孔鳛楹瘮?shù)自變量,
sqrt、log、exp、sin、cos、tan等函數(shù)都可以用向量作自變量,結(jié)果是對向量的每一個元素取相應(yīng)的函數(shù)值函數(shù)min和max分別取向量自變量的最小值和最大值,函數(shù)sum計算向量自變量的元素和,函數(shù)mean計算均值,函數(shù)var計算樣本方差(分母為n-1),函數(shù)sd計算標(biāo)準(zhǔn)差如果求var(x)而x是矩陣,則結(jié)果為樣本協(xié)方差陣。(行向量為觀測值)負數(shù)開根號要補充成復(fù)數(shù)形式>sqrt(-4)[1]NaNwarning:……>sqrt(-4+0i)[1]2isort(x)返回x的元素從小到大排序的結(jié)果向量
order(x)返回使得x從小到大排列的元素下標(biāo)向量(x[order(x)]等效于sort(x))。
>x=c(2,4,8,6,10)
>order(x)[1]12435
>x[order(x)][1]246810任何數(shù)與缺失值的運算結(jié)果仍為缺失值。例如,>2*c(1,NA,2)[1]2NA4
>sum(c(1,NA,2))[1]NA
最大最小值及其查詢>x<-c(5,2,4,1,10)>min(x)[1]2>max(x)[1]10>which.min(x)[1]4>which.max(x)[1]5
>range(x)[1]110產(chǎn)生有規(guī)律的數(shù)列在R中很容易產(chǎn)生一個等差數(shù)列。例如,1:n產(chǎn)生從1到n的整數(shù)列,
-2:3產(chǎn)生從-2到3的整數(shù)列,
5:2產(chǎn)生反向的數(shù)列:注意優(yōu)先級
1:n-1不是代表1到n-1而是向量1:n減去1,>1:n-1
[1]01234>1:(n-1)
[1]1234
seq函數(shù)是更一般的等差數(shù)列函數(shù)。如只指定一個自變量n>0,則seq(n)相當(dāng)于1:n。指定兩個自變量時,第一量是開始值,第二量是結(jié)束值,如seq(-2,3)是從-2到3,默認(rèn)公差為1。R函數(shù)調(diào)用的一個很好的特點是它可以使用不同個數(shù)的自變量,函數(shù)可以對不同類型的自變量給出不同結(jié)果,自變量可以用“自變量名=自變量值”的形式指定。例如,seq(-2,3)可以寫成seq(from=-2,to=3)??梢杂靡粋€by參數(shù)指定等差數(shù)列的增加值,例如:
>seq(0,2,0.7)
[1]0.00.71.4
也可以寫成>seq(from=0,to=2,by=0.7)。參數(shù)的位置可以互換有參數(shù)名的參數(shù)的次序任意,如:
>seq(0,by=0.7,to=2)[1]0.00.71.4
可以用length參數(shù)指定數(shù)列長度,如>seq(from=10,length=5)產(chǎn)生10到14。seq函數(shù)還可以用一種seq(along=向量名)的格式,這時只能用這一個參數(shù),產(chǎn)生該向量的下標(biāo)序列,如:
>x
[1]1.004.006.25
>seq(along=x)[1]123
也可以加入by這個參數(shù)另一個類似的函數(shù)是rep,它可以重復(fù)第一個自變量若干次,例如:
>rep(x,3)
[1]1.004.006.251.004.006.251.004.006.25
第一個參數(shù)名為x,第二個參數(shù)名為times(重復(fù)次數(shù))。>rep(x,each=3)[1]1.001.001.004.004.004.006.256.256.25此外numeric(n)可以產(chǎn)生一個長度為n的零向量
向量可以取邏輯值,如:
>a=c(T,T,F)>a[1]TRUETRUEFALSE
當(dāng)然,邏輯向量往往是一個比較的結(jié)果,如:
>x<-c(1.00,4.00,6.25)>b=x>3>b
[1]FALSETRUETRUE邏輯向量
一個向量與常量比較大小,結(jié)果還是一個向量,元素為每一對比較的結(jié)果邏輯值。兩個向量也可以比較,如:
>log(10*x)[1]2.3025853.6888794.135167
>log(10*x)>x
[1]TRUEFALSEFALSE
比較運算符包括<,<=,>,>=,==,!=。兩個邏輯向量可以進行與(&)、或(|)運算,結(jié)果是對應(yīng)元素運算的結(jié)果。對邏輯向量x計算!x表示取每個元素的非。例如:>x=c(1,4,6.25,1.6)>(x>1.5)&(x<3)
[1]FALSEFALSEFALSETRUE
判斷一個邏輯向量是否都為真值的函數(shù)是all,如:>all(log(10*x)>x)[1]FALSE
判斷是否其中有真值的函數(shù)是any,如:
>any(log(10*x)>x)[1]TRUE
函數(shù)is.na(x)用來判斷x的每一個元素是否缺失。如>is.na(c(1,NA,3))
[1]FALSETRUEFALSE
邏輯值可以強制轉(zhuǎn)換為整數(shù)值,TRUE變成1,F(xiàn)ALSE變成0。例如,age>65為老年人,否則為年輕人,可以用c(“young”,“old”)[(age>65)+1]表示。當(dāng)年齡大于65時age>65等于TRUE,加1則把TRUE轉(zhuǎn)換為數(shù)值型的1,結(jié)果得2,于是返回第二個下標(biāo)處的“old”。否則等于0+1下標(biāo)處的“young”。
>age=c(89,20,10,66);c('young','old')[(age>65)+1];
[1]"old""young""young""old"
缺失數(shù)據(jù)NA表示缺失、NaN表示不確定的數(shù)注意下面例子的比較
>x<-c(0/1,0/0,1/0,NA);x[1]0NaNInfNA>is.nan(x)[1]FALSETRUEFALSEFALSE>is.na(x)[1]FALSETRUEFALSETRUE>is.finite(x)[1]TRUEFALSEFALSEFALSE>is.infinite(x)[1]FALSEFALSETRUEFALSE字符型向量
向量元素可以取字符串值。例如:
>c1=c("x","sin(x)")>c1
[1]"x""sin(x)"
>ns=c("Weight","Height",“age")>ns
[1]"Weight""Height""age"
paste函數(shù)用來把它的自變量連成一個字符串,中間用空格分開,例如:>paste("My","Job")
[1]"MyJob">paste('Hi',‘Goodmorning')
[1]"HiGoodmorning"連接的自變量可以是向量,這時各對應(yīng)元素連接起來,長度不相同時較短的向量被重復(fù)使用。自變量可以是數(shù)值向量,連接時自動轉(zhuǎn)換成適當(dāng)?shù)淖址硎?,例如?gt;paste(c("X","Y"),"=",1:4)
[1]"X=1""Y=2""X=3""Y=4"
分隔用的字符可以用sep參數(shù)指定,例如:
>paste('result.',1:5,sep="")[1]"result.1""result.2""result.3""result.4""result.5"
如果給paste()函數(shù)指定了collapse參數(shù),則把字符串向量的各個元素連接成一個字符串,中間用collapse指定的值分隔。比如
>paste(c('a','b'),collapse='.')
[1]'a.b'還可以和日期函數(shù)一起合并,顯示當(dāng)天的日歷和時間>paste(“Todayis”,date())[1]“TodayisMonSep2019:20:352010”復(fù)數(shù)向量
R支持復(fù)數(shù)運算。復(fù)數(shù)常量只要用3.5+2.1i這樣的格式即可。復(fù)向量的每一個元素都是復(fù)數(shù)。
Re()計算實部,Im()計算虛部,
Mod()計算復(fù)數(shù)模,Arg()計算復(fù)數(shù)幅角。>complex(2)[1]0+0i0+0i>complex(2,4,6)[1]4+6i4+6i>complex(1,4,6)[1]4+6i>y=1:2+1i*(8:9)
>y[1]1+8i2+9i
>Re(y)
[1]12>Im(y)
[1]89
>Mod(y)
[1]8.0622589.219544>Arg(y)
[1]1.4464411.352127向量下標(biāo)運算
某一個元素只要用x[i]的格式訪問,其中x是一個向量名,或一個取向量值的表達式,如:
>x[1]1.004.006.25
>x[2][1]4
>(c(1,3,5)+5)[2][1]8可以單獨改變一個元素的值,例如:>x[2]<-125>x[1]1.00125.006.25R提供了四種方法來訪問向量的一部分,格式為x[v],x為向量名或向量值的表達式,v是如下的表示下標(biāo)向量:一、取正整數(shù)值的下標(biāo)向量
v為一個向量,取值在1到length(x)之間,取值允許重復(fù),例如,
>x[c(1,3)][1]1.006.25
>x[1:2][1]1125
>x[c(1,3,2,1)][1]1.006.25125.001.00
>c("a","b","c")[rep(c(2,1,3),3)][1]"b""a""c""b""a""c""b""a""c"
二、取負整數(shù)值的下標(biāo)向量
v為一個向量,取值在-length(x)到-1之間,表示扣除相應(yīng)位置的元素。例如:
>x[-(1:2)][1]6.25
>x[-3][1]1.00125.00三、取邏輯值的下標(biāo)向量
v為和x等長的邏輯向量,x[v]表示取出所有v為真值的元素,如:
>x
[1]1.00125.006.25
>x<10
[1]TRUEFALSETRUE>x[x<10]
[1]1.006.25#取出所有小于10的元素組成子集>x[x<0]
[1]numeric(0)#下標(biāo)都是F,是個零長度的向量邏輯值下標(biāo)是一種強有力的檢索工具,例如x[sin(x)>0]可以取出x中所有正弦函數(shù)值為正的元素組成的向量。四、取字符型值的下標(biāo)向量在定義向量時可以給元素加上名字,例如:
>ages<-c(Li=33,Zhang=29,Liu=18)>ages
[1]LiZhangLiu332918
>ages[1][1]Li33>ages[1]=2#可以改變向量中字符型元素取值>ages[1][1]Li2
向量還可用元素名字來訪問元素或元素子集,>ages[c("Li","Liu")]
[1]LiLiu3318向量元素名可以后加,利用names(),
例如:>ages1=c(33,29,18)>names(ages1)=c("Li","Zhang","Liu")>ages1[1]LiZhangLiu332918
R中還可以改變一部分元素的值,例如:>x[1]1.00125.006.25>x[c(1,3)]=c(144,169)>x
[1]144125169
注意賦值的長度必須相同,例外是可以把部分元素賦為一個統(tǒng)一值:>x[c(1,3)]=0>x
[1]01250
要把向量所有元素賦為一個相同的值而又不想改變其長度,可以用x[]的寫法:>x[]=0
注意這與“x=0”是不同的,前者賦值后向量長度不變,后者使向量變?yōu)闃?biāo)量0。改變部分元素值的技術(shù)與邏輯值下標(biāo)方法結(jié)合可以定義向量的分段函數(shù),例如:要定義y=f(x)為當(dāng)x<0時取1-x,否則取1+x,可以用:>y=numeric(length(x))
>y[x<0]=1-x[x<0]
>y[x>=0]=1+x[x>=0]
思考:要定義y=f(x)為當(dāng)x<3.0時取x,3.0=<x<3.5時取x+10,否則取x+20;x=c(0.5,-1,1,2,3,4,1,2,3,4);求y.>x<-c(0.5,-1,1,2,3,4,1,2,3,4);>y<-numeric(length(x));>y[x<3]<-x[x<3];>y[(x>=3)&(x<3.5)]<-x[(x>=3)&(x<3.5)]+10;>y[x>3.5]<-x[x>3.5]+20;>x;[1]0.5-1.01.02.03.04.01.02.03.04.0>y;[1]0.5-1.01.02.013.024.01.02.013.024.0對象和它的模式與屬性R是一種基于對象(object)的語言,它的對象包含了若干元素作為其數(shù)據(jù),還有一些特殊數(shù)據(jù)稱為屬性(attribute),一個向量是一個對象,一個圖形也是一個對象。R的對象分為單純型(atomic)和復(fù)合型(recursive)
單純型:所有的元素都是同一種基本類型,如字符串向量,數(shù)值型向量都是單純型
復(fù)合型:元素可以是不同類型的對象,如列表(list),可以由不同類型的對象組成其元素,元素可以以它們各自單獨的方式被列出。注意:空向量也有自己的模式,如:空的字符串會顯示為:character(0)空的數(shù)值向量會顯示為:numeric(0)R的對象還有一種特殊的空值型(null)>z<-NULL;#表示沒有值,和NA不同,NA是有空值,NULL是根本沒有固有屬性:模式(mode)和長度(length)
R的對象有兩個基本的屬性:類型屬性(mode)和長度屬性(length)。>x<-c(1,4,6.25);>mode(x)[1]“numeric”>mode(x>1)[1]“l(fā)ogical”>length(x)[1]3長度為零的向量numeric()或者numeric(0)character()或者character(0)R允許強制轉(zhuǎn)換對象的類型>x<-as.character(x);x[1]“1”“4”“6.25”>x<-as.numeric(x);x
[1]1.004.006.25as.開頭的函數(shù),帶有強制轉(zhuǎn)換類型的功能(具體可參加索引部分)R允許修改對象的長度對象的長度可以為0或正整數(shù)值>y<-numeric();y[2]<-1;y[1]NA1>z[2]<-1;z
[1]NA1如果要增加對象的長度,可以通過賦值>x[4]<-125;x
[1]1.004.006.26125.00如果要縮短對象的長度,取一個長度短的子集>x<-x[1:3];x[1]1.004.006.25>x<-x[c(1,3)];x[1]1.006.25還可以通過修改長度參數(shù)來達到目的>even<-1:10;>even<-even[2*1:5];even[1]246810>length(even);
[1]5>length(even)<-3;
[1]246特有屬性:attributes()和attr()
attributes()返回對象除了mode和length以外的特有屬性,如果沒有特有屬性,則返回NULL。>fruit<-c(apple=1,orange=2);fruitappleorange12>mode(fruit)[1]“numeric”>attributes(fruit)$names[1]"apple""orange">attributes(x)NULL用attr()可以對對象的特有屬性進行賦值>attr(fruit,"names")<-c("peanut","almond");>fruitpeanutalmond12>attr(fruit,"type")<-"nut";>fruit;peanutalmond12>attributes(fruit)$names[1]"peanut""almond"$type[1]"nut"多維數(shù)組和矩陣
數(shù)組(array)和矩陣(matrix)
數(shù)組(array):
帶多個下標(biāo)的類型相同的元素的集合,常用的是數(shù)值型的數(shù)組如矩陣,也可以有其它類型(如字符型、邏輯型、復(fù)型數(shù)組)。數(shù)組有一個特征屬性叫做維數(shù)向量(dim屬性),比如維數(shù)向量有兩個元素時數(shù)組為二維數(shù)組(矩陣)。維數(shù)向量的每一個元素指定了該下標(biāo)的上界,下標(biāo)的下界總為1。向量只有定義了維數(shù)向量(dim屬性)后才能被看作是數(shù)組。來看下面兩個例子例
>a=1:24>a>dim(a)=c(6,4)#a是6行4列結(jié)構(gòu)的數(shù)組>a
[,1][,2][,3][,4][1,]171319[2,]281420[3,]391521[4,]4101622[5,]5111723[6,]6121824>dim(a)<-24;
#對a賦予dim以后,a也是數(shù)組了按列的順序例>a=1:24>a>dim(a)=c(2,4,3)>a
,,1[,1][,2][,3][,4][1,]1357[2,]2468,,2[,1][,2][,3][,4][1,]9111315[2,]10121416,,3[,1][,2][,3][,4][1,]17192123[2,]18202224數(shù)組元素的排列次序缺省情況下是采用第一下標(biāo)變化最快,最后下標(biāo)變化最慢的順序存放的;對于矩陣(二維數(shù)組)則是按列存放。例如,假設(shè)數(shù)組a的元素為1:24,維數(shù)向量為c(2,3,4),則各元素次序為a[1,1,1],a[2,1,1],a[1,2,1],a[2,2,1],a[1,3,1],...,a[2,3,4]。用函數(shù)array()或matrix()可以更直觀地定義數(shù)組。array()函數(shù)的完全使用為>array(x,dim=length(x),dimnames=NULL)其中x是第一自變量,應(yīng)該是一個向量,表示數(shù)組的元素值組成的向量。dim參數(shù)可省,省略時作為一維數(shù)組(但不同于向量)。dimnames屬性可以省略,不省略時是一個長度與維數(shù)相同的列表,列表的每個成員為一維的名字。比較下面幾個命令:>x<-c(1,2,3,4);x[1]1234>y<-array(x);y[1]1234>dim(x)NULL>dim(y)[1]4>z<-array(x,dim=c(2,2));>z[,1][,2][1,]13[2,]24>z<-array(x,dim=c(2,2),dimnames=list(c("row1","row2"),c("col1","col2")));
col1col2row113row224函數(shù)matrix():用于構(gòu)造二維數(shù)組,即矩陣。格式為matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
其中第一自變量data為數(shù)組的數(shù)據(jù)向量(缺省值為缺失值NA),nrow為行數(shù),ncol為列數(shù),byrow表示數(shù)據(jù)填入矩陣時按行次序還是列次序,缺省情況下按列次序。
dimnames缺省是空值,否則是一個長度為2的列表,列表第一個成員是長度與行數(shù)相等的字符型向量,表示每行的標(biāo)簽,列表第二個成員是長度與列數(shù)相同的字符型向量,表示每列的標(biāo)簽。例如,定義一個3行4列,由1:12按行次序排列的矩陣,可以用:>b<-matrix(1:12,ncol=4,byrow=T);b[,1][,2][,3][,4][1,]1234[2,]5678[3,]9101112
b<-matrix(1:12,ncol=4);b
[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912注意:在有數(shù)據(jù)的情況下只需指定行數(shù)或列數(shù)之一。指定的數(shù)據(jù)個數(shù)允許少于所需的數(shù)據(jù)個數(shù),這時循環(huán)使用提供的數(shù)據(jù)。例如:>b<-matrix(1,nrow=3,ncol=4)#生成3行4列的的矩陣,元素都是1。
>b<-matrix(c(1,3),nrow=3,ncol=4);[,1][,2][,3][,4][1,]1313[2,]3131[3,]1313數(shù)組下標(biāo)
訪問數(shù)組的某個元素,寫出數(shù)組名和方括號內(nèi)用逗號分開的下標(biāo)即可,如a[2,1,2]。>a<-1:24;>dim(a)<-c(2,4,3);>a[2,1,2][1]10在每一個下標(biāo)位置寫一個下標(biāo)向量,表示對這一維取出所有指定下標(biāo)的元素,如a[1,2:3,2:3]取出所有第一下標(biāo)為1,第二下標(biāo)為2或3,第三下標(biāo)為2或3的元素。>a[1,2:3,2:3]
[,1][,2][1,]1119[2,]1321略寫某一維的下標(biāo),則表示該維全選。>a[1,,][,1][,2][,3][1,]1917[2,]31119[3,]51321[4,]71523>a[,2,][,1][,2][,3][1,]31119[2,]41220a[,,]或a[]都表示整個數(shù)組。a[]=0把元素都賦成0。還有一種特殊下標(biāo)是對于數(shù)組只用一個下標(biāo)向量(是向量,不是數(shù)組),比如a[3:4],這時忽略數(shù)組的維數(shù)信息,把下標(biāo)表達式看作是對數(shù)組的數(shù)據(jù)向量取子集。>a[3:4][1]34不規(guī)則數(shù)組下標(biāo)
可以把數(shù)組中的任意位置的元素作為一組訪問,其方法是用一個矩陣作為數(shù)組的下標(biāo),例如,我們要把上面的形狀為c(2,4,3)的數(shù)組a的第[1,1,1],[2,2,3],[1,4,3],[2,4,1]號共四個元素作為一個整體訪問,先定義一個包含這些下標(biāo)作為行的二維數(shù)組:>b=matrix(c(1,1,1,2,2,3,1,4,3,2,4,1),ncol=3,byrow=T)>b
>a[b]
[1]120238>x1<-c(100,200)>x2<-1:6>x1+x2
[1]101202103204105206>x3<-matrix(1:6,nrow=3)>x3>x1+x3
[,1][,2][1,]101204[2,]202105[3,]103206數(shù)組四則運算
數(shù)組可以進行四則運算(+,-,*,/,^),解釋為數(shù)組對應(yīng)元素的四則運算,參加運算的數(shù)組一般應(yīng)該是相同形狀的(dim屬性完全相同)。例如,假設(shè)A,B,C是三個形狀相同的數(shù)組,則>D<-C+2*A/B
形狀不一致的向量和數(shù)組也可以進行四則運算,一般的規(guī)則是數(shù)組的數(shù)據(jù)向量對應(yīng)元素進行運算,把短的循環(huán)使用來與長的匹配,并盡可能保留共同的數(shù)組屬性。例如:不規(guī)則運算除非你清楚地知道規(guī)則,否則應(yīng)避免使用這樣的辦法。矩陣運算
矩陣是二維數(shù)組,應(yīng)用廣泛函數(shù)t(A)返回矩陣A的轉(zhuǎn)置。nrow(A)為矩陣A的行數(shù),ncol(A)為矩陣A的列數(shù)。矩陣之間進行普通的加減乘除四則運算,即數(shù)組的對應(yīng)元素之間進行運算,所以注意A*B不是矩陣乘法而是矩陣對應(yīng)元素相乘。要進行矩陣乘法,使用運算符%*%,A%*%B表示矩陣A乘以矩陣B(當(dāng)然要求A的列數(shù)等于B的行數(shù))。例如:>A<-matrix(1:12,nrow=4,ncol=3,byrow=T)>B<-matrix(c(1,0),nrow=3,ncol=2,byrow=T)>A%*%B
另外,向量用在矩陣乘法中可以作為行向量看待也可以作為列向量看待,這要看哪一種觀點能夠進行矩陣乘法運算。例如,設(shè)x是一個長度為n的向量,A是一個n*n矩陣,則“x%*%A%*%x”表示二次型。但是,有時向量在矩陣乘法中的地位并不清楚,比如“x%*%x”就既可能表示內(nèi)積,也可能表示n*n陣。因為前者較常用,所以R選擇表示前者,但內(nèi)積最好還是用crossprod(x)來計算。要表示n*n陣,可以用“cbind(x)%*%x”或“x%*%rbind(x)”。函數(shù)crossprod(X,Y)表示一般的交叉乘積(內(nèi)積),即X的每一列與Y的每一列的內(nèi)積組成的矩陣。如果X和Y都是向量則是一般的內(nèi)積。只寫一個參數(shù)X的crossprod(X)計算X自身的內(nèi)積。其它矩陣運算還有solve(A,b)解線性方程組,solve(A)求方陣A的逆矩陣,svd()計算奇異值分解,qr()計算QR分解,eigen()計算特征向量和特征值。詳見隨機幫助,例如:>?qr函數(shù)diag()的作用依賴于其自變量。diag(vector)返回以自變量(向量)為主對角元素的對角矩陣。diag(matrix)返回由矩陣的主對角元素組成的向量。diag(k)(k為標(biāo)量)返回k階單位陣。>x=1:3>x
[1]123>crossprod(x)[,1][1,]14>cbind(x)%*%x[,1][,2][,3][1,]123[2,]246[3,]369>x%*%rbind(x)
[,1][,2][,3][1,]123[2,]246[3,]369>y=diag(x)>y[,1][,2][,3][1,]100[2,]020[3,]003>diag(y)[1]123>diag(3)[,1][,2][,3][1,]100[2,]010[3,]001>A<-t(array(c(1:8,10),dim=c(3,3)))>b<-c(1,1,1)
>x<-solve(A,b);x
[1]-1.000000e+001.000000e+003.806634e-16>A.inverse<-solve(A);A.inverse[,1][,2][,3][1,]-0.6666667-1.3333331[2,]-0.66666673.666667-2[3,]1.0000000-2.0000001>det(A)[1]-3>svd.A<-svd(A);svd.A#A=UDV',U、V正交陣,D為對角陣$d
#奇異陣對角線的元素[1]17.41250520.87516140.1968665$u[,1][,2][,3][1,]-0.20933730.964385140.1616762[2,]-0.50384850.03532145-0.8630696[3,]-0.8380421-0.262132990.4785099$v[,1][,2][,3][1,]-0.4646675-0.8332863550.2995295[2,]-0.55375460.009499485-0.8326258[3,]-0.69097030.5527599940.4658502>attach(svdA)>u%*%diag(d)%*%t(v)[,1][,2][,3][1,]123[2,]456[3,]7810矩陣合并與拉直
函數(shù)cbind()把其自變量橫向拼成一個大矩陣,rbind()把其自變量縱向拼成一個大矩陣。cbind()的自變量是矩陣或者看作列向量的向量,自變量的高度應(yīng)該相等(對于向量,高度即長度,對于矩陣,高度即行數(shù))。rbind的自變量是矩陣或看作行向量的向量,自變量的寬度應(yīng)該相等(對于向量,寬度即長度,對于矩陣,寬度即列數(shù))。如果參與合并的自變量比其它自變量短則循環(huán)補足后合并。例如:>x1=rbind(c(1,2),c(3,4))>x1[,1][,2][1,]12[2,]34>x2<-10+x1>x3<-cbind(x1,x2)>x3[,1][,2][,3][,4][1,]121112[2,]341314>x4=rbind(x1,x2)>x4[,1][,2][1,]12[2,]34[3,]1112[4,]1314>cbind(1,x1)[,1][,2][,3][1,]112[2,]134設(shè)a是一個數(shù)組,要把它轉(zhuǎn)化為向量(去掉dim和dimnames屬性),只要用函數(shù)as.vector(a)
返回值就可以了(注意函數(shù)只能通過函數(shù)值返回結(jié)果而不允許修改它的自變量,比如t(X)返回X的轉(zhuǎn)置矩陣而X本身并未改變)。另一種由數(shù)組得到其數(shù)據(jù)向量的簡單辦法是使用函數(shù)c(),例如c(a)的結(jié)果是a的數(shù)據(jù)向量。這樣的另一個好處是c()允許多個自變量,它可以把多個自變量都看成數(shù)據(jù)向量連接起來。例如,設(shè)A和B是兩個矩陣,則c(A,B)表示把A按列次序拉直為向量并與把B按列次序拉直為向量的結(jié)果連接起來。一定注意拉直時是按列次序拉直的。>a=rbind(c(1,2),c(3,4))>a[,1][,2][1,]12[2,]34>as.vector(a)
[1]1324#按列拉直>b=t(a)>b[,1][,2][1,]13[2,]24>c(a,b)[1]13241234#按列拉直數(shù)組的維名字
數(shù)組可以有一個屬性dimnames保存各維的各個下標(biāo)的名字,缺省時為NULL(即無此屬性)。以矩陣為例,它有兩個維:行維和列維。比如,設(shè)x為2行3列矩陣,它的行維可以定義一個長度為2的字符向量作為每行的名字,它的列維可以定義一個長度為3的向量作為每列的名字,屬性dimnames是一個列表,列表的每個成員是一個維名字的字符向量或NULL。例如:
>x<-matrix(1:6,ncol=2,dimnames=list(c("one","two","three"),c("First","Second")),byrow=T)>x
FirstSecondone12two34three56我們也可以先定義矩陣x然后再為dimnames(x)賦值。對于矩陣,我們還可以使用屬性rownames和colnames來訪問行名和列名。在定義了數(shù)組的維名后我們對這一維的下標(biāo)就可以用它的名字來訪問,>x<-matrix(1:6,ncol=2,byrow=T)>rownames(x)<-c("第一行","第二行","第三行")>colnames(x)<-c("第一列","第二列")>x
第一列第二列第一行12第二行34第三行56>x["第一行","第二列"][1]2>x["第一行",]
第一列第二列
12>x[,"第二列"]
第一行第二行第三行
246數(shù)組的外積
兩個數(shù)組a和b的外積是由a的每一個元素與b的每一個元素搭配在一起相乘得到一個新元素,這樣得到一個維數(shù)向量等于a的維數(shù)向量與b的維數(shù)向量連起來的數(shù)組,>a<-c(1,2,3)>b<-c(2,5,7)>a%o%b[,1][,2][,3][1,]257[2,]41014[3,]61521注意:b%o%a==t(a%o%b)即若d為a和b的外積,則dim(d)=c(dim(a),dim(b))。a和b的外積記作a%o%b。如>d<-a%o%b
也可以寫成一個函數(shù)調(diào)用的形式:>d<-outer(a,b,'*')
注意outer(a,b,f)是一個一般性的外積函數(shù),它可以把a的任一個元素與b的任意一個元素搭配起來作為f的自變量計算得到新的元素值,外積是兩個元素相乘的情況。函數(shù)當(dāng)然也可以是加、減、除,或其它一般函數(shù)。當(dāng)函數(shù)為乘積時可以省略不寫。>outer(a,b,"+")[,1][,2][,3][1,]368[2,]479[3,]5810例如,我們希望計算函數(shù)在一個x和y的網(wǎng)格上的值用來繪制三維曲面圖,可以用如下方法生成網(wǎng)格及函數(shù)值:>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)
用這個一般函數(shù)可以很容易地把兩個數(shù)組的所有元素都兩兩組合一遍進行指定的運算。例子:考慮簡單的2×2矩陣,其元素均在0,1,...,9中取值。假設(shè)四個元素a,b,c,d都是相互獨立的服從離散均勻分布的隨機變量,我們設(shè)法求矩陣行列式ad-bc的分布。首先,隨機變量ad和bc同分布,它的取值由以下外積矩陣給出,每一個取值的概率均為1/100:>x<-outer(0:9,0:9)#兩個向量的各種取值這個語句產(chǎn)生一個10×10的外積矩陣。為了計算ad的100個值(有重復(fù))與bc的100個值相減得到的10000個結(jié)果,可以使用如下外積函數(shù):
>y<-outer(x,x,“-”)#兩者想減的各種可能這樣得到一個維數(shù)向量為c(10,10,10,10)的四維數(shù)組,每一個元素為行列式的一個可能取值,概率為萬分之一。因為這些取值中有很多重復(fù),我們可以用一個table()函數(shù)來計算每一個值的出現(xiàn)次數(shù)(頻數(shù)):>f<-table(y)得到的結(jié)果是一個帶有元素名的向量f,f的元素名為y的一個取值,f的元素值為y該取值出現(xiàn)的頻數(shù),比如f[1]的元素名為-81,值為19,表示值-81在數(shù)組d2中出現(xiàn)了19次。通過計算length(f)可以知道共有163個不同值。還可以把這些值繪制一個頻數(shù)分布圖(除以10000則為實際概率):>plot(as.numeric(names(f)),f,type="h",xlab=“行列式值",ylab="頻數(shù)")
其中as.numeric()把向量f中的元素名又轉(zhuǎn)換成了數(shù)值型,用來作為作圖的橫軸坐標(biāo),f中的元素值即頻數(shù)作為縱軸,type="h"表示是畫垂線型圖。
>plot(as.numeric(names(f)),f,type='h',xlab='行列式值',ylab='頻數(shù)')
>plot(as.numeric(names(f)),f/10000,type='h',xlab='行列式值',ylab='頻率')
數(shù)組的廣義轉(zhuǎn)置
可以用aperm(a,perm)函數(shù)把數(shù)組a的各維按perm中指定的新次序重新排列。例如:
>a<-array(1:24,dim=c(2,3,4))#2行3列4組>b<-aperm(a,c(2,3,1))#3行4列2組
結(jié)果a的第2維變成了b的第1維,a的第3維變成了b的第2維,a的第1維變成了b的第3維。對于矩陣a,aperm(a,c(2,1))恰好是矩陣轉(zhuǎn)置。對于矩陣轉(zhuǎn)置可以簡單地用t(a)表示。
>c<-aperm(a,c(2,1))>a=array(1:12,dim=c(2,3,2))>a,,1[,1][,2][,3][1,]135[2,]246,,2[,1][,2][,3][1,]7911[2,]81012>aperm(a,c(3,2,1))
,,1[,1][,2][,3][1,]135[2,]7911,,2[,1][,2][,3][1,]246[2,]81012>aperm(a,c(2,1,3)),,1[,1][,2][1,]12[2,]34[3,]56,,2[,1][,2][1,]78[2,]910[3,]1112
apply函數(shù)
對于向量,我們有sum、mean等函數(shù)對其進行計算。對于數(shù)組,如果我們想對其中一維(或若干維)進行某種計算,可以用apply函數(shù)。其一般形式為:apply(X,MARGIN,FUN,...)其中X為一個數(shù)組,MARGIN是固定哪些維不變,F(xiàn)UN是用來計算的函數(shù)。例如,設(shè)a是n*m矩陣,則apply(a,1,sum)的意義是對a的各行求和(保留第一維即第一個下標(biāo)不變),結(jié)果是一個長度為n的向量(與第一維長度相同),而apply(a,2,sum)意義是對a的各列求和,結(jié)果是一個長度為m的向量(與第二維長度相同)。>>a[,1][,2][1,]43[2,]97[3,]12>apply(a,2,sum)[1]1412>ap
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京農(nóng)業(yè)大學(xué)《思想政治教育研究方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安城市建設(shè)職業(yè)學(xué)院《動畫素描》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川西南航空職業(yè)學(xué)院《設(shè)計基礎(chǔ)形態(tài)構(gòu)成》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江音樂學(xué)院《園林法規(guī)》2023-2024學(xué)年第二學(xué)期期末試卷
- 甘肅民族師范學(xué)院《電力拖動自動控制系統(tǒng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江護理高等??茖W(xué)?!吨嗅t(yī)經(jīng)典選讀一》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都大學(xué)《資賦優(yōu)異教育概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 揚州工業(yè)職業(yè)技術(shù)學(xué)院《食品生物技術(shù)實驗指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西城市職業(yè)大學(xué)《教師實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 湘中幼兒師范高等專科學(xué)?!镀胀ɑ瘜W(xué)I》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年全國幼兒園教師資格證考試教育理論知識押題試題庫及答案(共九套)
- 2024年鄭州電力高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 產(chǎn)品試產(chǎn)流程
- 舞臺機械基礎(chǔ)知識培訓(xùn)
- 人教版數(shù)學(xué)八年級下冊 第16章 二次根式 單元測試(含答案)
- 中學(xué)班主任培訓(xùn)內(nèi)容
- DB51T 1511-2022建設(shè)項目對自然保護區(qū)自然資源、自然生態(tài)
- 2024年湘教版初中地理一輪復(fù)習(xí)專題三 天氣與氣候
- 四級人工智能訓(xùn)練師(中級)職業(yè)技能等級認(rèn)定考試題及答案
- 運用HFMEA品管工具優(yōu)化臨床安全輸血流程醫(yī)院品質(zhì)管理獲獎案例(護理部聯(lián)合臨床輸血科信息處)
- 《商務(wù)溝通-策略、方法與案例》課件 第八章 求職溝通
評論
0/150
提交評論