R語言入門,向量、多維數(shù)組和矩陣.ppt_第1頁
R語言入門,向量、多維數(shù)組和矩陣.ppt_第2頁
R語言入門,向量、多維數(shù)組和矩陣.ppt_第3頁
R語言入門,向量、多維數(shù)組和矩陣.ppt_第4頁
R語言入門,向量、多維數(shù)組和矩陣.ppt_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實驗目的,實驗內容,學習S語言中向量、多維數(shù)組和矩陣的表示方法,1、數(shù)據(jù)表示 2、應用實例 3、實驗作業(yè),S向量、多維數(shù)組和矩陣,S語言是基于對象(Object)的語言 基本的數(shù)據(jù)類型有: 向量、矩陣、列表等 復雜的數(shù)據(jù)對象有: 數(shù)據(jù)框對象,時間序列對象,模型對象,圖形對象,等等。,S語言表達式可以使用常量和變量。 變量名: 由字母、數(shù)字、句點組成,第一個字符必須是字母,長度沒有限制,但區(qū)分大小寫。 特別要注意句點可以作為名字的合法部分。,常量,常量為:數(shù)值型、邏輯型和字符型三種,其中 數(shù)值型數(shù)據(jù)又可以分為整型、單精度、雙精度等 例如,123,123.45,1.2345e30 是數(shù)值型常量; “Weight”,“李明”是字符型; 邏輯真值寫為T或TRUE(注意區(qū)分大小寫,寫t或true都沒意義),邏輯假值寫為F或FALSE。 復數(shù)常量就用3.5-2.1i這樣的寫法表示。,S中的數(shù)據(jù)可以取缺失值,用符號NA代表缺失值。 函數(shù)is.na(x)返回x是否缺失值(返回值T或F)。,向量(Vector)與賦值,向量是有相同基本類型的元素序列,即一維數(shù)組 定義向量的最常用辦法是使用函數(shù)c(), 它把若干個數(shù)值或字符串組合為一個向量, 比如: x = c(1:3, 10:13) x 1 1 2 3 10 11 12 13 S中用符號“ x1 = c(1, 2) 和 assign(“x1”, c(1, 2)相同 函數(shù)length(x)可以計算向量x的長度。,向量運算,可以對向量進行加()減()乘(*)除(/)、乘方()運算,其含意是對向量的每一個元素進行運算。 例如: x y =x*2+1 y 1 3.0 9.0 13.5,%/%表示整數(shù)除法(比如5 %/% 3為1), %表示求余數(shù)(如5 % 3為2)。,可以用向量作為函數(shù)自變量, sqrt、log、exp、sin、cos、tan等函數(shù)都可以用向量作自變量,結果是對向量的每一個元素取相應的函數(shù)值 函數(shù)min和max分別取向量自變量的最小值和最大值, 函數(shù)sum計算向量自變量的元素和, 函數(shù)mean計算均值, 函數(shù)var計算樣本方差(分母為n-1), 函數(shù)sd計算標準差(在Splus中用sqrt(var()計算) 如果求var(x)而x是矩陣,則結果為樣本協(xié)方差陣。 (行向量為觀測值),隨機向量,記 X = ( X1 , X2 , , Xp ) 為 p 維隨機向量,對 X = ( X1 , X2 , , Xp ) 進行一次觀測, 得觀測值: ( x11 , x12 , , x1p ) = X(1) , 它是一個樣品。,對 X = ( X1 , X2 , , Xp )進行觀測n次, 得n個樣品: X( i ) = ( xi1 , x i 2 , , x i p ) ,i =1,n 它是一個樣本. 用矩陣記為如下,稱為樣本數(shù)據(jù)陣.,多元總體樣本的數(shù)字特征,其中, (1) 樣本均值向量 X :,多元總體樣本的數(shù)字特征,其中,(2) 樣本離差陣 (又稱交叉乘積陣)A :,(3) 樣本協(xié)方差陣 S :,多元總體樣本的數(shù)字特征,其中,稱為變量X i 的樣本方差; 樣本方差的平方根 稱為變量X i 的樣本標準差.,si i,(4) 樣本相關陣R :,多元總體樣本的數(shù)字特征,其中,sort(x)返回x的元素從小到大排序的結果向量 order(x)返回使得x從小到大排列的元素下標向量(xorder(x)等效于sort(x))。 x=c(2,4,8,6,10) order(x) 1 1 2 4 3 5 xorder(x) 1 2 4 6 8 10,任何數(shù)與缺失值的運算結果仍為缺失值。 例如, 2*c(1, NA, 2) 1 2 NA 4 sum(c(1, NA, 2) 1 NA,產生有規(guī)律的數(shù)列,在S中很容易產生一個等差數(shù)列。 例如,1:n產生從1到n的整數(shù)列, -2:3產生從-2到3 的整數(shù)列, 5:2產生反向的數(shù)列: 注意 1:n-1不是代表1到n-1而是向量1:n減去1, 1:n-1 1 0 1 2 3 4 1:(n-1) 1 1 2 3 4,seq函數(shù)是更一般的等差數(shù)列函數(shù)。 如只指定一個自變量n0,則seq(n)相當于1:n 。指定兩個自變量時,第一量是開始值,第二量是結束值,如seq(-2,3)是從-2到3,默認公差為1 。,S函數(shù)調用的一個很好的特點是它可以使用不同個數(shù)的自變量,函數(shù)可以對不同類型的自變量給出不同結果,自變量可以用“自變量名自變量值”的形式指定。例如,seq(-2,3)可以寫成seq(from=-2, to=3)??梢杂靡粋€by參數(shù)指定等差數(shù)列的增加值,例如:, seq(0, 2, 0.7) 1 0.0 0.7 1.4 也可以寫成seq(from=0, to=2, by=0.7)。,有參數(shù)名的參數(shù)的次序任意,如: seq(0, by=0.7, to=2) 1 0.0 0.7 1.4 可以用length參數(shù)指定數(shù)列長度, 如seq(from=10, length=5)產生10到14。 seq函數(shù)還可以用一種seq(along=向量名)的格式,這時只能用這一個參數(shù),產生該向量的下標序列,如:, x 1 1.00 4.00 6.25 seq(along=x) 1 1 2 3,另一個類似的函數(shù)是rep,它可以重復第一個自變量若干次,例如: rep(x,3) 1 1.00 4.00 6.25 1.00 4.00 6.25 1.00 4.00 6.25 第一個參數(shù)名為x,第二個參數(shù)名為times(重復次數(shù))。 此外numeric(n)可以產生一個長度為n的零向量,邏輯向量,向量可以取邏輯值,如: l = c(T, T, F) l輸出1 TRUE TRUE FALSE 當然,邏輯向量往往是一個比較的結果,如: x 輸出 1 1.00 4.00 6.25 l = x 3 l 輸出 1 FALSE TRUE TRUE,一個向量與常量比較大小,結果還是一個向量,元素為每一對比較的結果邏輯值。 兩個向量也可以比較,如: log(10*x) 1 2.302585 3.688879 4.135167 log(10*x) x 輸出1 TRUE FALSE FALSE 比較運算符包括,=,=,!=。,邏輯向量,兩個邏輯向量可以進行與(&)、或(|)運算,結果是對應元素運算的結果。對邏輯向量x計算!x表示取每個元素的非。 例如:x=c(1,4,6.25,1.6) (x 1.5) & (x 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 FALSE TRUE FALSE 邏輯值可以強制轉換為整數(shù)值,TRUE變成1,F(xiàn)ALSE變成0。 例如,age65為老年人,否則為年輕人, 可以用c(“young”, “old”)(age65)+1 表示。 當年齡大于65時age65等于TRUE,加1則把TRUE轉換為數(shù)值型的1,結果得2,于是返回第二個下標處的“old”。否則等于0+1下標處的“young”。 age=c(89,20,10,66); c(young,old)(age65)+1; 1 “old“ “young“ “young“ “old“,字符型向量,向量元素可以取字符串值。例如: c1 =c(“x“, “sin(x)“) c1 輸出 1 “x“ “sin(x)“ ns = c(“Weight“, “Height“, “年齡“) ns 輸出1 “Weight“ “Height“ “年齡“ paste函數(shù)用來把它的自變量連成一個字符串,中間用空格分開,例如: paste(“My“, “Job“) 1 “My Job“ paste(Hi,早) 輸出1 “Hi 早“,連接的自變量可以是向量,這時各對應元素連接起來,長度不相同時較短的向量被重復使用。自變量可以是數(shù)值向量,連接時自動轉換成適當?shù)淖址硎荆纾?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=.) 得到a.b。,復數(shù)向量,S支持復數(shù)運算。 復數(shù)常量只要用3.5+2.1i這樣的格式即可。 復向量的每一個元素都是復數(shù)。 可以用complex()函數(shù)生成復向量(見幫助)。Re()計算實部,Im()計算虛部, Mod() 計算復數(shù)模,Arg()計算復數(shù)幅角。,complex package:base R Documentation Complex Vectors Description: Basic functions which support complex arithmetic in R. Usage: complex(length.out = 0, real = numeric(), imaginary = numeric(), modulus = 1, argument = 0) plex(x, .) plex(x) Re(x) Im(x) Mod(x) Arg(x) Conj(x) Arguments: length.out: numeric. Desired length of the output vector, inputs being recycled as needed. real: numeric vector. imaginary: numeric vector . modulus: numeric vector.,argument: numeric vector. x: an object, probably of mode complex. .: further arguments passed to or from other methods. Details: Complex vectors can be created with complex. The vector can be specified either by giving its length, its real and imaginary parts, or modulus and argument. (Giving just the length generates a vector of complex zeroes.) plex attempts to coerce its argument to be of complex type: like as.vector it strips attributes including names. Note that plex and is.numeric are never both TRUE. The functions Re, Im, Mod, Arg and Conj have their usual interpretation as returning the real part, imaginary part,modulus, argument and complex conjugate for complex values. Modulus and argument are also called the _polar coordinates_. If z = x + i y with real x and y, Mod(z) = sqrtx2 + y2, and for phi= Arg(z), x = cos(phi) and y = sin(phi). They are all generic functions: methods can be defined for them individually or via the Complex group generic. In addition, the elementary trigonometric, logarithmic and exponential functions are available for complex values. plex is generic: you can write methods to handle specific classes of objects, see InternalMethods.,References: Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S Language_. Wadsworth & Brooks/Cole. Examples: 0i (-3:3) matrix(1i (-6:5), nr=4)#- all columns are the same 0 1i # a complex NaN # create a complex normal vector z - complex(real = rnorm(100), imag = rnorm(100) # or also (less efficiently): z2 - 1:2 + 1i*(8:9), complex(2) 1 0+0i 0+0i complex(2,4,6) 1 4+6i 4+6i complex(1,4,6) 1 4+6i y = 1:2 + 1i*(8:9) y 1 1+8i 2+9i Re(y) 1 1 2 Im(y) 1 8 9 Mod(y) 1 8.062258 9.219544 Arg(y) 1 1.446441 1.352127,向量下標運算,某一個元素只要用xi的格式訪問,其中x是一個向量名,或一個取向量值的表達式,如: x 1 1.00 4.00 6.25 x2 1 4 (c(1, 3, 5) + 5)2 1 8 可以單獨改變一個元素的值,例如: x2 x 1 1.00 125.00 6.25,S提供了四種方法來訪問向量的一部分,格式為xv,x為向量名或向量值的表達式,v是如下的表示下標向量: 一、取正整數(shù)值的下標向量 v為一個向量,取值在1到length(x)之間,取值允許重復,例如, xc(1,3) 1 1.00 6.25 x1:2 1 1 125 xc(1,3,2,1) 1 1.00 6.25 125.00 1.00 c(“a“, “b“, “c“)rep(c(2,1,3), 3) 1 “b“ “a“ “c“ “b“ “a“ “c“ “b“ “a“ “c“,二、取負整數(shù)值的下標向量 v為一個向量,取值在length(x)到1之間,表示扣除相應位置的元素。例如: x-(1:2) 1 6.25,三、取邏輯值的下標向量 v為和x等長的邏輯向量,xv表示取出所有v為真值的元素,如:, x 輸出: 1 1.00 125.00 6.25 x xx xx0 輸出: numeric(0),可見xx0可以取出x中所有正弦函數(shù)值為正的元素組成的向量。,如果下標都是假值則結果是一個零長度的向量, 顯示為numeric(0)。,四、取字符型值的下標向量 在定義向量時可以給元素加上名字,例如: ages ages 輸出: Li Zhang Liu 33 29 18 ages1 輸出: Li 33 ages1=2 ages1 輸出: Li 2 向量還可用元素名字來訪問元素或元素子集, 例如: agesc(“Li“, “Liu“) 輸出: Li Liu 33 18,向量元素名可以后加,例: ages1 = c(33, 29, 18) names(ages1) = c(“Li“, “Zhang“, “Liu“) ages1 輸出 Li Zhang Liu 33 29 18 S中還可以改變一部分元素的值,例如: x 1 1.00 125.00 6.25 xc(1,3) = c(144, 169) x 1 144 125 169 注意賦值的長度必須相同,例外是可以把部分元素賦為一個統(tǒng)一值: xc(1,3) =0 x 1 0 125 0,要把向量所有元素賦為一個相同的值而又不想改變其長度,可以用x的寫法: x = 0,注意這與“x = 0”是不同的,前者賦值后向量長度不變,后者使向量變?yōu)闃肆?。 改變部分元素值的技術與邏輯值下標方法結合可以定義向量的分段函數(shù),,例如:要定義y=f(x)為當x y = numeric(length(x) yx yx=0 = 1 + xx=0,要定義y=f(x)為當x3.0時取x, 3.0=x3.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); yx=3),多維數(shù)組和矩陣 數(shù)組(array)和矩陣(matrix),數(shù)組(array)帶多個下標的類型相同的元素的集合,常用的是數(shù)值型的數(shù)組如矩陣,也可以有其它類型(如字符型、邏輯型、復型數(shù)組)。 數(shù)組有一個特征屬性叫做維數(shù)向量(dim屬性),比如維數(shù)向量有兩個元素時數(shù)組為二維數(shù)組(矩陣)。維數(shù)向量的每一個元素指定了該下標的上界,下標的下界總為1。 一組值只有定義了維數(shù)向量(dim屬性)后才能被看作是數(shù)組。比如: a=1:24 a dim(a)=c(2,4,3) a,數(shù)組(array)和矩陣(matrix),數(shù)組元素的排列次序缺省情況下是采用FORTRAN的數(shù)組元素次序(按列次序),即第一下標變化最快,最后下標變化最慢,對于矩陣(二維數(shù)組)則是按列存放。例如,假設數(shù)組a的元素為1:24,維數(shù)向量為c(2,3,4),則各元素次序為a1,1,1, a2,1,1, a1,2,1, a2,2,1, a1,3,1, ., a2,3,4。 用函數(shù)array()或matrix()可以更直觀地定義數(shù)組。array()函數(shù)的完全使用為array(x, dim=length(x), dimnames=NULL),其中x是第一自變量,應該是一個向量,表示數(shù)組的元素值組成的向量。dim參數(shù)可省,省略時作為一維數(shù)組(但不同于向量)。dimnames屬性可以省略,不省略時是一個長度與維數(shù)相同的列表(list,見后面),列表的每個成員為一維的名字。,函數(shù)matrix():二維數(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ù)相等的字符型向量,表示每行的標簽,列表第二個成員是長度與列數(shù)相同的字符型向量,表示每列的標簽。例如,定義一個3行4列,由1:12按行次序排列的矩陣,可以用: b - matrix(1:12, ncol=4, byrow=T), b b ,1 ,2 ,3 ,4 1, 1 2 3 4 2, 5 6 7 8 3, 9 10 11 12 注意在有數(shù)據(jù)的情況下只需指定行數(shù)或列數(shù)之一。指定的數(shù)據(jù)個數(shù)允許少于所需的數(shù)據(jù)個數(shù),這時循環(huán)使用提供的數(shù)據(jù)。例如: b - matrix(0, nrow=3, ncol=4) 生成3行4列的元素都為0的矩陣。,數(shù)組下標,訪問數(shù)組的某個元素,寫出數(shù)組名和方括號內用逗號分開的下標即可,如a2,1,2。 在每一個下標位置寫一個下標向量,表示對這一維取出所有指定下標的元素,如a1, 2:3, 2:3取出所有第一下標為1,第二下標為2或3,第三下標為2或3的元素。 略寫某一維的下標,則表示該維全選。 a , , 或a都表示整個數(shù)組。 a =0 把元素都賦成0。 還有一種特殊下標是對于數(shù)組只用一個下標向量(是向量,不是數(shù)組),比如a3:4 ,這時忽略數(shù)組的維數(shù)信息,把下標表達式看作是對數(shù)組的數(shù)據(jù)向量取子集。,不規(guī)則數(shù)組下標,可以把數(shù)組中的任意位置的元素作為一組訪問, 其方法是用一個矩陣作為數(shù)組的下標, 例如,我們要把上面的形狀為c(2,3,4)的數(shù)組a的第1,1,1, 2,2,3, 1,3,4, 2,1,4號共四個元素作為一個整體訪問,先定義一個包含這些下標作為行的二維數(shù)組: b = matrix(c(1,1,1, 2,2,3, 1,3,4, 2,1,4), ncol=3, byrow=T) b ab x1 x2 x1+x2 x3 x3 x1+x3,數(shù)組四則運算,數(shù)組可以進行四則運算(+,, *, /,),解釋為數(shù)組對應元素的四則運算,參加運算的數(shù)組一般應該是相同形狀的(dim屬性完全相同)。例如,假設A, B, C是三個形狀相同的數(shù)組,則 D - C + 2*A/B 四則運算遵循通常的優(yōu)先級規(guī)則。 形狀不一致的向量和數(shù)組也可以進行四則運算,一般的規(guī)則是數(shù)組的數(shù)據(jù)向量對應元素進行運算,把短的循環(huán)使用來與長的匹配,并盡可能保留共同的數(shù)組屬性。例如:不規(guī)則運算 除非你清楚地知道規(guī)則,否則應避免使用這樣的辦法(標量與數(shù)組或向量的四則運算除外)。,矩陣運算,矩陣是二維數(shù)組,應用廣泛 函數(shù)t(A)返回矩陣A的轉置。nrow(A)為矩陣A的行數(shù),ncol(A)為矩陣A的列數(shù)。 矩陣之間進行普通的加減乘除四則運算,即數(shù)組的對應元素之間進行運算,所以注意A*B不是矩陣乘法而是矩陣對應元素相乘。 要進行矩陣乘法,使用運算符%*%,A%*%B表示矩陣A乘以矩陣B(當然要求A的列數(shù)等于B的行數(shù))。例如: A B A,另外,向量用在矩陣乘法中可以作為行向量看待也可以作為列向量看待,這要看哪一種觀點能夠進行矩陣乘法運算。 例如,設x是一個長度為n的向量,A是一個n*n 矩陣,則“x %*% A %*% x”表示二次型 。 但是,有時向量在矩陣乘法中的地位并不清楚,比如“x %*% x”就既可能表示內積 , 也可能表示n*n 陣 。因為前者較常用,所以S選擇表示前者,但內積最好還是用crossprod(x)來計算。要表示 n*n陣,可以用“cbind(x) %*% x”或“x %*% rbind(x) ”。 函數(shù)crossprod(X, Y)表示一般的交叉乘積(內積) ,即X的每一列與Y的每一列的內積組成的矩陣。如果X和Y都是向量則是一般的內積。只寫一個參數(shù)X的crossprod(X)計算X自身的內積 。,其它矩陣運算還有solve(A,b)解線性方程組 ,solve(A)求方陣A的逆矩陣,svd()計算奇異值分解,qr()計算QR分解,eigen()計算特征向量和特征值。詳見隨機幫助,例如: ?qr 函數(shù)diag()的作用依賴于其自變量。 diag(vector)返回以自變量(向量)為主對角元素的對角矩陣。 diag(matrix)返回由矩陣的主對角元素組成的向量。 diag(k)(k為標量)返回k階單位陣。, x=1:3 x 1 1 2 3 crossprod(x) ,1 1, 14 cbind(x) %*% x ,1 ,2 ,3 1, 1 2 3 2, 2 4 6 3, 3 6 9 x %*% rbind(x) ,1 ,2 ,3 1, 1 2 3 2, 2 4 6 3, 3 6 9, y=diag(x) y ,1 ,2 ,3 1, 1 0 0 2, 0 2 0 3, 0 0 3 diag(y) 1 1 2 3 diag(3) ,1 ,2 ,3 1, 1 0 0 2, 0 1 0 3, 0 0 1,矩陣合并與拉直,函數(shù)cbind()把其自變量橫向拼成一個大矩陣,rbind()把其自變量縱向拼成一個大矩陣。 cbind()的自變量是矩陣或者看作列向量的向量,自變量的高度應該相等(對于向量,高度即長度,對于矩陣,高度即行數(shù))。 rbind的自變量是矩陣或看作行向量的向量,自變量的寬度應該相等(對于向量,寬度即長度,對于矩陣,寬度即列數(shù))。 如果參與合并的自變量比其它自變量短則循環(huán)補足后合并。例如:, x1= rbind(c(1,2), c(3,4) x1 ,1 ,2 1, 1 2 2, 3 4 x2 x3 x3 ,1 ,2 ,3 ,4 1, 1 2 11 12 2, 3 4 13 14, x4 = rbind(x1, x2) x4 ,1 ,2 1, 1 2 2, 3 4 3, 11 12 4, 13 14 cbind(1, x1) ,1 ,2 ,3 1, 1 1 2 2, 1 3 4,設a是一個數(shù)組,要把它轉化為向量(去掉dim和dimnames屬性),只要用函數(shù)as.vector(a) 返回值就可以了(注意函數(shù)只能通過函數(shù)值返回結果而不允許修改它的自變量,比如t(X)返回X的轉置矩陣而X本身并未改變)。 另一種由數(shù)組得到其數(shù)據(jù)向量的簡單辦法是使用函數(shù)c() ,例如c(a)的結果是a的數(shù)據(jù)向量。這樣的另一個好處是c()允許多個自變量,它可以把多個自變量都看成數(shù)據(jù)向量連接起來。例如,設A和B是兩個矩陣,則c(A,B)表示把A按列次序拉直為向量并與把B按列次序拉直為向量的結果連接起來。一定注意拉直時是按列次序拉直的。, a= rbind(c(1,2), c(3,4) a ,1 ,2 1, 1 2 2, 3 4 as.vector(a) 1 1 3 2 4 b=t(a) b ,1 ,2 1, 1 3 2, 2 4 c(a,b) 1 1 3 2 4 1 2 3 4,數(shù)組的維名字,數(shù)組可以有一個屬性dimnames保存各維的各個下標的名字,缺省時為NULL(即無此屬性)。 以矩陣為例,它有兩個維:行維和列維。比如,設x為2行3列矩陣,它的行維可以定義一個長度為2的字符向量作為每行的名字,它的列維可以定義一個長度為3的向量作為每列的名字,屬性dimnames是一個列表,列表的每個成員是一個維名字的字符向量或NULL。例如: x x First Second one 1 2 two 3 4 three 5 6,我們也可以先定義矩陣x然后再為dimnames(x)賦值。 對于矩陣,我們還可以使用屬性rownames和colnames來訪問行名和列名。 在定義了數(shù)組的維名后我們對這一維的下標就可以用它的名字來訪問,, x rownames(x) colnames(x) x 第一列 第二列 第一行 1 2 第二行 3 4 第三行 5 6, x“第一行“, “第二列“ 1 2 x“第一行“, 第一列 第二列 1 2 x, “第二列“ 第一行 第二行 第三行 2 4 6,數(shù)組的外積,兩個數(shù)組a和b的外積是由a的每一個元素與b的每一個元素搭配在一起相乘得到一個新元素,這樣得到一個維數(shù)向量等于a的維數(shù)向量與b的維數(shù)向量連起來的數(shù)組, 即若d為a和b的外積,則dim(d)=c(dim(a), dim(b)。 a和b的外積記作 a %o% b。如 d d - outer(a, b, *) 注意outer(a, b, f)是一個一般性的外積函數(shù),它可以把a的任一個元素與b的任意一個元素搭配起來作為f的自變量計算得到新的元素值,外積是兩個元素相乘的情況。函數(shù)當然也可以是加、減、除,或其它一般函數(shù)。當函數(shù)為乘積時可以省略不寫。,數(shù)組的外積,例如,我們希望計算函數(shù) 在一個x和y的網格上的值用來繪制三維曲面圖,可以用如下方法生成網格及函數(shù)值: x y f z - outer(x, y, f) persp(x,y,z) 用這個一般函數(shù)可以很容易地把兩個數(shù)組的所有元素都兩兩組合一遍進行指定的運算。,例子: 考慮簡單的22矩陣 ,其元素均在0,1,.,9中取值。假設四個元素 a, b, c, d都是相互獨立的服從離散均勻分布的隨機變量,我們設法求矩陣行列式 ad-bc的分布。首先,隨機變量 ad和 bc同分布,它的取值由以下外積矩陣給出,每一個取值的概率均為1/100: x y- outer(x, x, “-“) 這樣得到一個維數(shù)向量為c(10,10,10,10)的四維數(shù)組,每一個元素為行列式的一個可能取值,概率為萬分之一。因為這些取值中有很多重復,我們可以用一個table()函數(shù)來計算每一個值的出現(xiàn)次數(shù)(頻數(shù)):, f plot(as.numeric(names(f), f, type=“h“, + xlab=行列式值, ylab=頻數(shù)) 其中as.numeric()把向量f中的元素名又轉換成了數(shù)值型,用來作為作圖的橫軸坐標,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ù)組的廣義轉置,可以用aperm(a, perm)函數(shù)把數(shù)組a的各維按perm中指定的新次序重新排列。例如: a b c - aperm(a, c(2, 1),a=array(1:12,dim=c(2,3,2) a , , 1 ,1 ,2 ,3 1, 1 3 5 2, 2 4 6 , , 2 ,1 ,2 ,3 1, 7 9 11 2, 8 10 12, aperm(a,c(3,2,1) , , 1 ,1 ,2 ,3 1, 1 3 5 2, 7 9 11 , , 2 ,1 ,2 ,3 1, 2 4 6 2, 8 10 12, aperm(a,c(2,1,3) , , 1 ,1 ,2 1, 1 2 2, 3 4 3, 5 6 , , 2 ,1 ,2 1, 7 8 2, 9 10 3, 11 12,apply函數(shù),對于向量,我們有sum、mean等函數(shù)對其進行計算。對于數(shù)組,如果我們想對其中一維(或若干維)進行某種計算,可以用apply函數(shù)。其一般形式為: apply(X, MARGIN, FUN, .) 其中X為一個數(shù)組,MARGIN是固定哪些維不變,F(xiàn)UN是用來計算的函數(shù)。例如,設a是n*m 矩陣,則apply(a, 1, sum)的意義是對a的各行求和(保留第一維即第一個下標不變),結果是一個長度為3的向量(與第一維長度相同),而apply(a, 2, sum)意義是對a的各列求和,結果是一個長度為4的向量(與第二維長度相同)。,如果函數(shù)FUN的結果是一個標量,MARGIN只有一個元素,則apply的結果是一個向量,其長度等于MARGIN指定維的長度,相當于固定MARGIN指定的那一維的每一個值而把其它維取出作為子數(shù)組或向量送入FUN中進行運算。如果MARGIN指定了多個維,則結果是一個維數(shù)向量等于dim(X)MARGIN的數(shù)組。 如果函數(shù)FUN的結果是一個長度為N的向量,則結果是一個維數(shù)向量等于c(N, dim(X)MARGIN)的數(shù)組,注意這時不論是對哪一維計算,結果都放在了第一維。所以,若我們要把43矩陣a的3列分別排序,只要用apply(a, 2, sort),這樣對每一列排序得到一個長度為4的向量,用第一維來引用,結果的維向量為c(N, dim(a)2)=c(4,3) ,保留了列維,恰好得到所需結果,運行如下例: a - cbind(c(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論