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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)?zāi)康?實(shí)驗(yàn)內(nèi)容,學(xué)習(xí)S語(yǔ)言中向量、多維數(shù)組和矩陣的表示方法,1、數(shù)據(jù)表示 2、應(yīng)用實(shí)例 3、實(shí)驗(yàn)作業(yè),S向量、多維數(shù)組和矩陣,S語(yǔ)言是基于對(duì)象(Object)的語(yǔ)言 基本的數(shù)據(jù)類型有: 向量、矩陣、列表等 復(fù)雜的數(shù)據(jù)對(duì)象有: 數(shù)據(jù)框?qū)ο?,時(shí)間序列對(duì)象,模型對(duì)象,圖形對(duì)象,等等。,S語(yǔ)言表達(dá)式可以使用常量和變量。 變量名: 由字母、數(shù)字、句點(diǎn)組成,第一個(gè)字符必須是字母,長(zhǎng)度沒(méi)有限制,但區(qū)分大小寫。 特別要注意句點(diǎn)可以作為名字的合法部分。,常量,常量為:數(shù)值型、邏輯型和字符型三種,其中 數(shù)值型數(shù)據(jù)又可以分為整型、單精度、雙精度等 例如,123,123.45,1.2345e30 是數(shù)值型常量; “Weight”,“李明”是字符型; 邏輯真值寫為T或TRUE(注意區(qū)分大小寫,寫t或true都沒(méi)意義),邏輯假值寫為F或FALSE。 復(fù)數(shù)常量就用3.5-2.1i這樣的寫法表示。,S中的數(shù)據(jù)可以取缺失值,用符號(hào)NA代表缺失值。 函數(shù)is.na(x)返回x是否缺失值(返回值T或F)。,向量(Vector)與賦值,向量是有相同基本類型的元素序列,即一維數(shù)組 定義向量的最常用辦法是使用函數(shù)c(), 它把若干個(gè)數(shù)值或字符串組合為一個(gè)向量, 比如: x = c(1:3, 10:13) x 1 1 2 3 10 11 12 13 S中用符號(hào)“ x1 = c(1, 2) 和 assign(“x1”, c(1, 2)相同 函數(shù)length(x)可以計(jì)算向量x的長(zhǎng)度。,向量運(yùn)算,可以對(duì)向量進(jìn)行加()減()乘(*)除(/)、乘方()運(yùn)算,其含意是對(duì)向量的每一個(gè)元素進(jìn)行運(yùn)算。 例如: 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ù)都可以用向量作自變量,結(jié)果是對(duì)向量的每一個(gè)元素取相應(yīng)的函數(shù)值 函數(shù)min和max分別取向量自變量的最小值和最大值, 函數(shù)sum計(jì)算向量自變量的元素和, 函數(shù)mean計(jì)算均值, 函數(shù)var計(jì)算樣本方差(分母為n-1), 函數(shù)sd計(jì)算標(biāo)準(zhǔn)差(在Splus中用sqrt(var()計(jì)算) 如果求var(x)而x是矩陣,則結(jié)果為樣本協(xié)方差陣。 (行向量為觀測(cè)值),隨機(jī)向量,記 X = ( X1 , X2 , , Xp ) 為 p 維隨機(jī)向量,對(duì) X = ( X1 , X2 , , Xp ) 進(jìn)行一次觀測(cè), 得觀測(cè)值: ( x11 , x12 , , x1p ) = X(1) , 它是一個(gè)樣品。,對(duì) X = ( X1 , X2 , , Xp )進(jìn)行觀測(cè)n次, 得n個(gè)樣品: X( i ) = ( xi1 , x i 2 , , x i p ) ,i =1,n 它是一個(gè)樣本. 用矩陣記為如下,稱為樣本數(shù)據(jù)陣.,多元總體樣本的數(shù)字特征,其中, (1) 樣本均值向量 X :,多元總體樣本的數(shù)字特征,其中,(2) 樣本離差陣 (又稱交叉乘積陣)A :,(3) 樣本協(xié)方差陣 S :,多元總體樣本的數(shù)字特征,其中,稱為變量X i 的樣本方差; 樣本方差的平方根 稱為變量X i 的樣本標(biāo)準(zhǔn)差.,si i,(4) 樣本相關(guān)陣R :,多元總體樣本的數(shù)字特征,其中,sort(x)返回x的元素從小到大排序的結(jié)果向量 order(x)返回使得x從小到大排列的元素下標(biāo)向量(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ù)與缺失值的運(yùn)算結(jié)果仍為缺失值。 例如, 2*c(1, NA, 2) 1 2 NA 4 sum(c(1, NA, 2) 1 NA,產(chǎn)生有規(guī)律的數(shù)列,在S中很容易產(chǎn)生一個(gè)等差數(shù)列。 例如,1:n產(chǎn)生從1到n的整數(shù)列, -2:3產(chǎn)生從-2到3 的整數(shù)列, 5:2產(chǎn)生反向的數(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ù)。 如只指定一個(gè)自變量n0,則seq(n)相當(dāng)于1:n 。指定兩個(gè)自變量時(shí),第一量是開始值,第二量是結(jié)束值,如seq(-2,3)是從-2到3,默認(rèn)公差為1 。,S函數(shù)調(diào)用的一個(gè)很好的特點(diǎn)是它可以使用不同個(gè)數(shù)的自變量,函數(shù)可以對(duì)不同類型的自變量給出不同結(jié)果,自變量可以用“自變量名自變量值”的形式指定。例如,seq(-2,3)可以寫成seq(from=-2, to=3)??梢杂靡粋€(gè)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ù)列長(zhǎng)度, 如seq(from=10, length=5)產(chǎn)生10到14。 seq函數(shù)還可以用一種seq(along=向量名)的格式,這時(shí)只能用這一個(gè)參數(shù),產(chǎn)生該向量的下標(biāo)序列,如:, x 1 1.00 4.00 6.25 seq(along=x) 1 1 2 3,另一個(gè)類似的函數(shù)是rep,它可以重復(fù)第一個(gè)自變量若干次,例如: rep(x,3) 1 1.00 4.00 6.25 1.00 4.00 6.25 1.00 4.00 6.25 第一個(gè)參數(shù)名為x,第二個(gè)參數(shù)名為times(重復(fù)次數(shù))。 此外numeric(n)可以產(chǎn)生一個(gè)長(zhǎng)度為n的零向量,邏輯向量,向量可以取邏輯值,如: l = c(T, T, F) l輸出1 TRUE TRUE FALSE 當(dāng)然,邏輯向量往往是一個(gè)比較的結(jié)果,如: x 輸出 1 1.00 4.00 6.25 l = x 3 l 輸出 1 FALSE TRUE TRUE,一個(gè)向量與常量比較大小,結(jié)果還是一個(gè)向量,元素為每一對(duì)比較的結(jié)果邏輯值。 兩個(gè)向量也可以比較,如: log(10*x) 1 2.302585 3.688879 4.135167 log(10*x) x 輸出1 TRUE FALSE FALSE 比較運(yùn)算符包括,=,=,!=。,邏輯向量,兩個(gè)邏輯向量可以進(jìn)行與(&)、或(|)運(yùn)算,結(jié)果是對(duì)應(yīng)元素運(yùn)算的結(jié)果。對(duì)邏輯向量x計(jì)算!x表示取每個(gè)元素的非。 例如: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)用來(lái)判斷x的每一個(gè)元素是否缺失。 如 is.na(c(1, NA, 3) 1 FALSE TRUE FALSE 邏輯值可以強(qiáng)制轉(zhuǎn)換為整數(shù)值,TRUE變成1,F(xiàn)ALSE變成0。 例如,age65為老年人,否則為年輕人, 可以用c(“young”, “old”)(age65)+1 表示。 當(dāng)年齡大于65時(shí)age65等于TRUE,加1則把TRUE轉(zhuǎn)換為數(shù)值型的1,結(jié)果得2,于是返回第二個(gè)下標(biāo)處的“old”。否則等于0+1下標(biāo)處的“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ù)用來(lái)把它的自變量連成一個(gè)字符串,中間用空格分開,例如: paste(“My“, “Job“) 1 “My Job“ paste(Hi,早) 輸出1 “Hi 早“,連接的自變量可以是向量,這時(shí)各對(duì)應(yīng)元素連接起來(lái),長(zhǎng)度不相同時(shí)較短的向量被重復(fù)使用。自變量可以是數(shù)值向量,連接時(shí)自動(dòng)轉(zhuǎn)換成適當(dāng)?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ù), 則把字符串向量的各個(gè)元素連接成一個(gè)字符串, 中間用collapse指定的值分隔。比如 paste(c(a, b), collapse=.) 得到a.b。,復(fù)數(shù)向量,S支持復(fù)數(shù)運(yùn)算。 復(fù)數(shù)常量只要用3.5+2.1i這樣的格式即可。 復(fù)向量的每一個(gè)元素都是復(fù)數(shù)。 可以用complex()函數(shù)生成復(fù)向量(見(jiàn)幫助)。Re()計(jì)算實(shí)部,Im()計(jì)算虛部, Mod() 計(jì)算復(fù)數(shù)模,Arg()計(jì)算復(fù)數(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,向量下標(biāo)運(yùn)算,某一個(gè)元素只要用xi的格式訪問(wèn),其中x是一個(gè)向量名,或一個(gè)取向量值的表達(dá)式,如: x 1 1.00 4.00 6.25 x2 1 4 (c(1, 3, 5) + 5)2 1 8 可以單獨(dú)改變一個(gè)元素的值,例如: x2 x 1 1.00 125.00 6.25,S提供了四種方法來(lái)訪問(wèn)向量的一部分,格式為xv,x為向量名或向量值的表達(dá)式,v是如下的表示下標(biāo)向量: 一、取正整數(shù)值的下標(biāo)向量 v為一個(gè)向量,取值在1到length(x)之間,取值允許重復(fù),例如, 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“,二、取負(fù)整數(shù)值的下標(biāo)向量 v為一個(gè)向量,取值在length(x)到1之間,表示扣除相應(yīng)位置的元素。例如: x-(1:2) 1 6.25,三、取邏輯值的下標(biāo)向量 v為和x等長(zhǎng)的邏輯向量,xv表示取出所有v為真值的元素,如:, x 輸出: 1 1.00 125.00 6.25 x xx xx0 輸出: numeric(0),可見(jiàn)xx0可以取出x中所有正弦函數(shù)值為正的元素組成的向量。,如果下標(biāo)都是假值則結(jié)果是一個(gè)零長(zhǎng)度的向量, 顯示為numeric(0)。,四、取字符型值的下標(biāo)向量 在定義向量時(shí)可以給元素加上名字,例如: ages ages 輸出: Li Zhang Liu 33 29 18 ages1 輸出: Li 33 ages1=2 ages1 輸出: Li 2 向量還可用元素名字來(lái)訪問(wèn)元素或元素子集, 例如: 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 注意賦值的長(zhǎng)度必須相同,例外是可以把部分元素賦為一個(gè)統(tǒng)一值: xc(1,3) =0 x 1 0 125 0,要把向量所有元素賦為一個(gè)相同的值而又不想改變其長(zhǎng)度,可以用x的寫法: x = 0,注意這與“x = 0”是不同的,前者賦值后向量長(zhǎng)度不變,后者使向量變?yōu)闃?biāo)量0。 改變部分元素值的技術(shù)與邏輯值下標(biāo)方法結(jié)合可以定義向量的分段函數(shù),,例如:要定義y=f(x)為當(dāng)x y = numeric(length(x) yx yx=0 = 1 + xx=0,要定義y=f(x)為當(dāng)x3.0時(shí)取x, 3.0=x3.5時(shí)取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)帶多個(gè)下標(biāo)的類型相同的元素的集合,常用的是數(shù)值型的數(shù)組如矩陣,也可以有其它類型(如字符型、邏輯型、復(fù)型數(shù)組)。 數(shù)組有一個(gè)特征屬性叫做維數(shù)向量(dim屬性),比如維數(shù)向量有兩個(gè)元素時(shí)數(shù)組為二維數(shù)組(矩陣)。維數(shù)向量的每一個(gè)元素指定了該下標(biāo)的上界,下標(biāo)的下界總為1。 一組值只有定義了維數(shù)向量(dim屬性)后才能被看作是數(shù)組。比如: a=1:24 a dim(a)=c(2,4,3) a,數(shù)組(array)和矩陣(matrix),數(shù)組元素的排列次序缺省情況下是采用FORTRAN的數(shù)組元素次序(按列次序),即第一下標(biāo)變化最快,最后下標(biāo)變化最慢,對(duì)于矩陣(二維數(shù)組)則是按列存放。例如,假設(shè)數(shù)組a的元素為1:24,維數(shù)向量為c(2,3,4),則各元素次序?yàn)閍1,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是第一自變量,應(yīng)該是一個(gè)向量,表示數(shù)組的元素值組成的向量。dim參數(shù)可省,省略時(shí)作為一維數(shù)組(但不同于向量)。dimnames屬性可以省略,不省略時(shí)是一個(gè)長(zhǎng)度與維數(shù)相同的列表(list,見(jiàn)后面),列表的每個(gè)成員為一維的名字。,函數(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ù)填入矩陣時(shí)按行次序還是列次序,缺省情況下按列次序。 dimnames缺省是空值,否則是一個(gè)長(zhǎng)度為2的列表,列表第一個(gè)成員是長(zhǎng)度與行數(shù)相等的字符型向量,表示每行的標(biāo)簽,列表第二個(gè)成員是長(zhǎng)度與列數(shù)相同的字符型向量,表示每列的標(biāo)簽。例如,定義一個(gè)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ù)個(gè)數(shù)允許少于所需的數(shù)據(jù)個(gè)數(shù),這時(shí)循環(huán)使用提供的數(shù)據(jù)。例如: b - matrix(0, nrow=3, ncol=4) 生成3行4列的元素都為0的矩陣。,數(shù)組下標(biāo),訪問(wèn)數(shù)組的某個(gè)元素,寫出數(shù)組名和方括號(hào)內(nèi)用逗號(hào)分開的下標(biāo)即可,如a2,1,2。 在每一個(gè)下標(biāo)位置寫一個(gè)下標(biāo)向量,表示對(duì)這一維取出所有指定下標(biāo)的元素,如a1, 2:3, 2:3取出所有第一下標(biāo)為1,第二下標(biāo)為2或3,第三下標(biāo)為2或3的元素。 略寫某一維的下標(biāo),則表示該維全選。 a , , 或a都表示整個(gè)數(shù)組。 a =0 把元素都賦成0。 還有一種特殊下標(biāo)是對(duì)于數(shù)組只用一個(gè)下標(biāo)向量(是向量,不是數(shù)組),比如a3:4 ,這時(shí)忽略數(shù)組的維數(shù)信息,把下標(biāo)表達(dá)式看作是對(duì)數(shù)組的數(shù)據(jù)向量取子集。,不規(guī)則數(shù)組下標(biāo),可以把數(shù)組中的任意位置的元素作為一組訪問(wèn), 其方法是用一個(gè)矩陣作為數(shù)組的下標(biāo), 例如,我們要把上面的形狀為c(2,3,4)的數(shù)組a的第1,1,1, 2,2,3, 1,3,4, 2,1,4號(hào)共四個(gè)元素作為一個(gè)整體訪問(wèn),先定義一個(gè)包含這些下標(biāo)作為行的二維數(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ù)組四則運(yùn)算,數(shù)組可以進(jìn)行四則運(yùn)算(+,, *, /,),解釋為數(shù)組對(duì)應(yīng)元素的四則運(yùn)算,參加運(yùn)算的數(shù)組一般應(yīng)該是相同形狀的(dim屬性完全相同)。例如,假設(shè)A, B, C是三個(gè)形狀相同的數(shù)組,則 D - C + 2*A/B 四則運(yùn)算遵循通常的優(yōu)先級(jí)規(guī)則。 形狀不一致的向量和數(shù)組也可以進(jìn)行四則運(yùn)算,一般的規(guī)則是數(shù)組的數(shù)據(jù)向量對(duì)應(yīng)元素進(jìn)行運(yùn)算,把短的循環(huán)使用來(lái)與長(zhǎng)的匹配,并盡可能保留共同的數(shù)組屬性。例如:不規(guī)則運(yùn)算 除非你清楚地知道規(guī)則,否則應(yīng)避免使用這樣的辦法(標(biāo)量與數(shù)組或向量的四則運(yùn)算除外)。,矩陣運(yùn)算,矩陣是二維數(shù)組,應(yīng)用廣泛 函數(shù)t(A)返回矩陣A的轉(zhuǎn)置。nrow(A)為矩陣A的行數(shù),ncol(A)為矩陣A的列數(shù)。 矩陣之間進(jìn)行普通的加減乘除四則運(yùn)算,即數(shù)組的對(duì)應(yīng)元素之間進(jìn)行運(yùn)算,所以注意A*B不是矩陣乘法而是矩陣對(duì)應(yīng)元素相乘。 要進(jìn)行矩陣乘法,使用運(yùn)算符%*%,A%*%B表示矩陣A乘以矩陣B(當(dāng)然要求A的列數(shù)等于B的行數(shù))。例如: A B A,另外,向量用在矩陣乘法中可以作為行向量看待也可以作為列向量看待,這要看哪一種觀點(diǎn)能夠進(jìn)行矩陣乘法運(yùn)算。 例如,設(shè)x是一個(gè)長(zhǎng)度為n的向量,A是一個(gè)n*n 矩陣,則“x %*% A %*% x”表示二次型 。 但是,有時(shí)向量在矩陣乘法中的地位并不清楚,比如“x %*% x”就既可能表示內(nèi)積 , 也可能表示n*n 陣 。因?yàn)榍罢咻^常用,所以S選擇表示前者,但內(nèi)積最好還是用crossprod(x)來(lái)計(jì)算。要表示 n*n陣,可以用“cbind(x) %*% x”或“x %*% rbind(x) ”。 函數(shù)crossprod(X, Y)表示一般的交叉乘積(內(nèi)積) ,即X的每一列與Y的每一列的內(nèi)積組成的矩陣。如果X和Y都是向量則是一般的內(nèi)積。只寫一個(gè)參數(shù)X的crossprod(X)計(jì)算X自身的內(nèi)積 。,其它矩陣運(yùn)算還有solve(A,b)解線性方程組 ,solve(A)求方陣A的逆矩陣,svd()計(jì)算奇異值分解,qr()計(jì)算QR分解,eigen()計(jì)算特征向量和特征值。詳見(jiàn)隨機(jī)幫助,例如: ?qr 函數(shù)diag()的作用依賴于其自變量。 diag(vector)返回以自變量(向量)為主對(duì)角元素的對(duì)角矩陣。 diag(matrix)返回由矩陣的主對(duì)角元素組成的向量。 diag(k)(k為標(biāo)量)返回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()把其自變量橫向拼成一個(gè)大矩陣,rbind()把其自變量縱向拼成一個(gè)大矩陣。 cbind()的自變量是矩陣或者看作列向量的向量,自變量的高度應(yīng)該相等(對(duì)于向量,高度即長(zhǎng)度,對(duì)于矩陣,高度即行數(shù))。 rbind的自變量是矩陣或看作行向量的向量,自變量的寬度應(yīng)該相等(對(duì)于向量,寬度即長(zhǎng)度,對(duì)于矩陣,寬度即列數(shù))。 如果參與合并的自變量比其它自變量短則循環(huán)補(bǔ)足后合并。例如:, 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,設(shè)a是一個(gè)數(shù)組,要把它轉(zhuǎn)化為向量(去掉dim和dimnames屬性),只要用函數(shù)as.vector(a) 返回值就可以了(注意函數(shù)只能通過(guò)函數(shù)值返回結(jié)果而不允許修改它的自變量,比如t(X)返回X的轉(zhuǎn)置矩陣而X本身并未改變)。 另一種由數(shù)組得到其數(shù)據(jù)向量的簡(jiǎn)單辦法是使用函數(shù)c() ,例如c(a)的結(jié)果是a的數(shù)據(jù)向量。這樣的另一個(gè)好處是c()允許多個(gè)自變量,它可以把多個(gè)自變量都看成數(shù)據(jù)向量連接起來(lái)。例如,設(shè)A和B是兩個(gè)矩陣,則c(A,B)表示把A按列次序拉直為向量并與把B按列次序拉直為向量的結(jié)果連接起來(lái)。一定注意拉直時(shí)是按列次序拉直的。, 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ù)組可以有一個(gè)屬性dimnames保存各維的各個(gè)下標(biāo)的名字,缺省時(shí)為NULL(即無(wú)此屬性)。 以矩陣為例,它有兩個(gè)維:行維和列維。比如,設(shè)x為2行3列矩陣,它的行維可以定義一個(gè)長(zhǎng)度為2的字符向量作為每行的名字,它的列維可以定義一個(gè)長(zhǎng)度為3的向量作為每列的名字,屬性dimnames是一個(gè)列表,列表的每個(gè)成員是一個(gè)維名字的字符向量或NULL。例如: x x First Second one 1 2 two 3 4 three 5 6,我們也可以先定義矩陣x然后再為dimnames(x)賦值。 對(duì)于矩陣,我們還可以使用屬性rownames和colnames來(lái)訪問(wèn)行名和列名。 在定義了數(shù)組的維名后我們對(duì)這一維的下標(biāo)就可以用它的名字來(lái)訪問(wèn),, x rownames(x) colnames(x) x 第一列 第二列 第一行 1 2 第二行 3 4 第三行 5 6, x“第一行“, “第二列“ 1 2 x“第一行“, 第一列 第二列 1 2 x, “第二列“ 第一行 第二行 第三行 2 4 6,數(shù)組的外積,兩個(gè)數(shù)組a和b的外積是由a的每一個(gè)元素與b的每一個(gè)元素搭配在一起相乘得到一個(gè)新元素,這樣得到一個(gè)維數(shù)向量等于a的維數(shù)向量與b的維數(shù)向量連起來(lái)的數(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)是一個(gè)一般性的外積函數(shù),它可以把a(bǔ)的任一個(gè)元素與b的任意一個(gè)元素搭配起來(lái)作為f的自變量計(jì)算得到新的元素值,外積是兩個(gè)元素相乘的情況。函數(shù)當(dāng)然也可以是加、減、除,或其它一般函數(shù)。當(dāng)函數(shù)為乘積時(shí)可以省略不寫。,數(shù)組的外積,例如,我們希望計(jì)算函數(shù) 在一個(gè)x和y的網(wǎng)格上的值用來(lái)繪制三維曲面圖,可以用如下方法生成網(wǎng)格及函數(shù)值: x y f z - outer(x, y, f) persp(x,y,z) 用這個(gè)一般函數(shù)可以很容易地把兩個(gè)數(shù)組的所有元素都兩兩組合一遍進(jìn)行指定的運(yùn)算。,例子: 考慮簡(jiǎn)單的22矩陣 ,其元素均在0,1,.,9中取值。假設(shè)四個(gè)元素 a, b, c, d都是相互獨(dú)立的服從離散均勻分布的隨機(jī)變量,我們?cè)O(shè)法求矩陣行列式 ad-bc的分布。首先,隨機(jī)變量 ad和 bc同分布,它的取值由以下外積矩陣給出,每一個(gè)取值的概率均為1/100: x y- outer(x, x, “-“) 這樣得到一個(gè)維數(shù)向量為c(10,10,10,10)的四維數(shù)組,每一個(gè)元素為行列式的一個(gè)可能取值,概率為萬(wàn)分之一。因?yàn)檫@些取值中有很多重復(fù),我們可以用一個(gè)table()函數(shù)來(lái)計(jì)算每一個(gè)值的出現(xiàn)次數(shù)(頻數(shù)):, f plot(as.numeric(names(f), f, type=“h“, + xlab=行列式值, ylab=頻數(shù)) 其中as.numeric()把向量f中的元素名又轉(zhuǎn)換成了數(shù)值型,用來(lái)作為作圖的橫軸坐標(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 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ù),對(duì)于向量,我們有sum、mean等函數(shù)對(duì)其進(jìn)行計(jì)算。對(duì)于數(shù)組,如果我們想對(duì)其中一維(或若干維)進(jìn)行某種計(jì)算,可以用apply函數(shù)。其一般形式為: apply(X, MARGIN, FUN, .) 其中X為一個(gè)數(shù)組,MARGIN是固定哪些維不變,F(xiàn)UN是用來(lái)計(jì)算的函數(shù)。例如,設(shè)a是n*m 矩陣,則apply(a, 1, sum)的意義是對(duì)a的各行求和(保留第一維即第一個(gè)下標(biāo)不變),結(jié)果是一個(gè)長(zhǎng)度為3的向量(與第一維長(zhǎng)度相同),而apply(a, 2, sum)意義是對(duì)a的各列求和,結(jié)果是一個(gè)長(zhǎng)度為4的向量(與第二維長(zhǎng)度相同)。,如果函數(shù)FUN的結(jié)果是一個(gè)標(biāo)量,MARGIN只有一個(gè)元素,則apply的結(jié)果是一個(gè)向量,其長(zhǎng)度等于MARGIN指定維的長(zhǎng)度,相當(dāng)于固定MARGIN指定的那一維的每一個(gè)值而把其它維取出作為子數(shù)組或向量送入FUN中進(jìn)行運(yùn)算。如果MARGIN指定了多個(gè)維,則結(jié)果是一個(gè)維數(shù)向量等于dim(X)MARGIN的數(shù)組。 如果函數(shù)FUN的結(jié)果是一個(gè)長(zhǎng)度為N的向量,則結(jié)果是一個(gè)維數(shù)向量等于c(N, dim(X)MARGIN)的數(shù)組,注意這時(shí)不論是對(duì)哪一維計(jì)算,結(jié)果都放在了第一維。所以,若我們要把43矩陣a的3列分別排序,只要用apply(a, 2, sort),這樣對(duì)每一列排序得到一個(gè)長(zhǎng)度為4的向量,用第一維來(lái)引用,結(jié)果的維向量為c(N, dim(a)2)=c(4,3) ,保留了列維,恰好得到所需結(jié)果,運(yùn)行如下例: a - cbind(c(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論