版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章R軟件的使用郭廣報(bào)統(tǒng)計(jì)計(jì)算第2章R軟件的使用郭廣報(bào)講解大綱2.1R軟件簡(jiǎn)介2.2數(shù)字、字符與向量2.3對(duì)象和它的模式與屬性2.4因子2.5多維數(shù)組和矩陣2.6列表與數(shù)據(jù)框2.7讀寫數(shù)據(jù)文件2.8控制流2.9編寫自己的函數(shù)2.10圖形功能2.11程序打包講解大綱2.1R軟件簡(jiǎn)介2.1R軟件簡(jiǎn)介R軟件是一個(gè)開放的統(tǒng)計(jì)編程環(huán)境,是一種語(yǔ)言,是S語(yǔ)言的一種實(shí)現(xiàn);R軟件是完全免費(fèi)的,;2.1R軟件簡(jiǎn)介R軟件是一個(gè)開放的統(tǒng)計(jì)編程環(huán)境,是一種語(yǔ)言,2.1.1R軟件的下載與安裝下載與安裝Demo2.1.1R軟件的下載與安裝http://cran.r-pr2.1.2初識(shí)R軟件例2.1某學(xué)校在體檢時(shí)測(cè)得12名女中學(xué)生體重X1(kg)和胸圍X2(cm)資料如表2.1所示,試計(jì)算體重與胸圍的均值與標(biāo)準(zhǔn)差。表2.1學(xué)生體檢資料學(xué)生編號(hào)體重X1胸圍X2學(xué)生編號(hào)體重X1胸圍X21356074378240748376634064944704427110426553772114173645681239752.1.2初識(shí)R軟件例2.1某學(xué)校在體檢時(shí)測(cè)得12名女中學(xué)生2.1.2初識(shí)R軟件(續(xù))解:#輸入體重X1<-c(35,40,40,42,37,45,43,37,44,42,41,39)#計(jì)算體重的均值和標(biāo)準(zhǔn)差mu1<-mean(X1);sigma1<-sd(X1)#輸入胸圍X2<-c(60,74,64,71,72,68,78,66,70,65,73,75)#計(jì)算胸圍的均值和標(biāo)準(zhǔn)差mu2<-mean(X2);sigma2<-sd(X2);2.1.2初識(shí)R軟件(續(xù))解:#輸入體重2.1.2初識(shí)R軟件(續(xù))例2.2繪出例2.1中12名學(xué)生體重與胸圍的散點(diǎn)圖和體重的直方圖。解:Plot(X1,X2)hist(X1)#繪出體重的直方圖hist(X1,probability=TRUE,main=paste("Histogramof","weight"),xlab="weight")2.1.2初識(shí)R軟件(續(xù))例2.2繪出例2.1中12名學(xué)生體2.1.2初識(shí)R軟件(續(xù))例2.3設(shè)有文本文件exam0203.txt,其內(nèi)容與格式參見文件,其中第一行相當(dāng)于表頭,說明變量的屬性,即說明各列的內(nèi)容,如第一列是姓名,第二列是性別,第三列是年齡,第四列是身高(cm),第五列是體重(lb),從第二行到最后一行是變量的內(nèi)容,試從該文件中讀出數(shù)據(jù),并對(duì)身高和體重作回歸分析。2.1.2初識(shí)R軟件(續(xù))例2.3設(shè)有文本文件exam0202.1.2初識(shí)R軟件(續(xù))解:rt<-read.table("exam0203.txt",head=TRUE);rtlm.sol<-lm(Weight~Height,data=rt)summary(lm.sol)2.1.2初識(shí)R軟件(續(xù))解:2.1.3R軟件主窗口與快捷方式2.1.3R軟件主窗口與快捷方式2.1.3R軟件主窗口與快捷方式其它菜單Demo2.1.3R軟件主窗口與快捷方式其它菜單Demo2.2數(shù)字、字符與向量1、向量的賦值R軟件中最簡(jiǎn)單的運(yùn)算是向量賦值,有三種形式:x<-c(10.4,5.6,3.1,6.4,21.7)assign(“x”,c(10.4,5.6,3.1,6.4,21.7))c(10.4,5.6,3.1,6.4,21.7)->x2.2數(shù)字、字符與向量1、向量的賦值2.2.2向量的運(yùn)算(續(xù))2、向量的運(yùn)算對(duì)于向量可以作加(+)、減(-)、乘(*)、除(/)和乘方(^)運(yùn)算,其含義是對(duì)向量的每一個(gè)元素進(jìn)行運(yùn)算,如:x<-c(-1,0,2);y<-c(3,8,2)v<-2*x+y+1;vx*yx/yx^2y^x5%/%3#整數(shù)除法5%%3#求余數(shù)2.2.2向量的運(yùn)算(續(xù))2、向量的運(yùn)算2.2.2向量的運(yùn)算(續(xù))exp(x)sqrt(y)3、與向量運(yùn)算有關(guān)的函數(shù)(1)求向量的最小值、最大值和范圍的函數(shù)x<-c(10,6,4,7,8)min(x)max(x)range(x)which.min(x)which.max(x)2.2.2向量的運(yùn)算(續(xù))exp(x)2.2.2向量的運(yùn)算(續(xù))(2)求和函數(shù)、求乘積函數(shù)#求和sum(x)#求分量連乘積prod(x)#求向量長(zhǎng)度length(x)2.2.2向量的運(yùn)算(續(xù))(2)求和函數(shù)、求乘積函數(shù)2.2.2向量的運(yùn)算(續(xù))(3)中位數(shù)、均值、方差、標(biāo)準(zhǔn)差和順序統(tǒng)計(jì)量#求中位數(shù)median(x)#求均值mean(x)#求方差var(x)#求標(biāo)準(zhǔn)差sd(x)#排序,得到和x長(zhǎng)度相同的sort(x)2.2.2向量的運(yùn)算(續(xù))(3)中位數(shù)、均值、方差、標(biāo)準(zhǔn)差和2.2.2產(chǎn)生有規(guī)律的序列1.等差數(shù)列a:b2.316:64:7.62.等間隔函數(shù)seq()函數(shù)是更一般的函數(shù)它產(chǎn)生等距間隔的數(shù)列其基本形式為:seq(from=value1,to=value2,by=value3)seq(-5,5,by=.2)->s1對(duì)于seq函數(shù)還有另一種使用方式seq(length=value2,from=value1,by=value3)s2<-seq(length=51,from=-5,by=.2)2.2.2產(chǎn)生有規(guī)律的序列1.等差數(shù)列a:b2.2.2產(chǎn)生有規(guī)律的序列3.重復(fù)函數(shù)rep()是重復(fù)函數(shù)它可以將某一向量重復(fù)若干次再放入新的變量中如:s<-rep(x,times=3)#即將變量重復(fù)3倍放在變量s中如x<-c(1,4,6.25);xs<-rep(x,times=3);s2.2.2產(chǎn)生有規(guī)律的序列3.重復(fù)函數(shù)2.2.3邏輯向量與其它語(yǔ)言一樣R軟件允許使用邏輯操作當(dāng)邏輯運(yùn)算為真返值為TRUE,當(dāng)邏輯運(yùn)算為假返值為FALSE.例如x<-1:7l<-x>3邏輯運(yùn)算符有<,<=,>,>=,==(表示TRUE等于)和TRUE!=(表TRUE示不等TRUE)all(c(1,2,3,4,5,6,7)>3)any(c(1,2,3,4,5,6,7)>3)2.2.3邏輯向量與其它語(yǔ)言一樣R軟件允許使用邏輯操作當(dāng)邏輯2.2.4缺失數(shù)據(jù)用NA表示某處的數(shù)據(jù)缺省缺失如z<-c(1:3,NA);z函數(shù)is.na()是檢測(cè)缺失數(shù)據(jù)的函數(shù),如果返回值為真(TRUE),則說明此數(shù)據(jù)是確實(shí)數(shù)據(jù),如果返回值為假(FALSE),則此數(shù)據(jù)不是缺失數(shù)據(jù),如:ind<-is.na(z);ind#將缺失數(shù)據(jù)改為0z[is.na(z)]<-0is.nan(),is.finite()2.2.4缺失數(shù)據(jù)用NA表示某處的數(shù)據(jù)缺省缺失如2.2.5字符型向量向量元素可以字符串值,例如:y<-c("er","sdf","dim","haha","good")可用paste函數(shù)把它的自變量連成一個(gè)字符串,中間用空格分開,例如:paste("My","Job")labs<-paste("X",1:6,sep="")paste("result.",1:4,sep="")paste(1:10)#sameasas.character(1:10)paste("Todayis",date())paste(c('a','b'),collapse='.')2.2.5字符型向量向量元素可以字符串值,例如:2.2.6復(fù)數(shù)向量R支持復(fù)數(shù)運(yùn)算,復(fù)數(shù)常量只要用通常的格式,如3.5+2.1i,complex模式的向量為復(fù)數(shù)元素的向量,可以用complex()函數(shù)生成復(fù)數(shù)向量,如x<-seq(-pi,pi,by=pi/10)y<-sin(x)>z<-complex(re=x,im=y)>plot(z)lines(z)對(duì)于復(fù)數(shù)運(yùn)算,Re()是計(jì)算復(fù)數(shù)的實(shí)部,Im()是計(jì)算復(fù)數(shù)的虛部,Mod()是計(jì)算復(fù)數(shù)的模,Arg()是計(jì)算復(fù)數(shù)的幅角。2.2.6復(fù)數(shù)向量R支持復(fù)數(shù)運(yùn)算,復(fù)數(shù)常量只要用通常的格2.2.7向量下標(biāo)運(yùn)算R軟件提供了十分靈活的訪問向量元素和向量子集的功能。向量中的某一個(gè)元素可以用x[i]的格式訪問,其中x是一個(gè)向量名,或一個(gè)取向量值的表達(dá)式,如x<-c(1,4,7)x[2](c(1,3,5)+5)[2]可以單獨(dú)改變一個(gè)或多個(gè)元素的值,如:x[2]<-125x[c(1,3)]<-c(144,169);x2.2.7向量下標(biāo)運(yùn)算R軟件提供了十分靈活的訪問向量元素和向2.2.7向量下標(biāo)運(yùn)算1、邏輯向量v為和x等長(zhǎng)的邏輯向量,x[v]表示取出所有v為真值得元素,如:x<-c(1,4,7)x<5x[x<5]可以將向量中缺失數(shù)據(jù)賦值為0z<-c(-1,1:3,NA)z[is.na(z)]<-02.2.7向量下標(biāo)運(yùn)算1、邏輯向量#or(z+1)[is.na(z)&z>0]=x;x#others,,,#or2.2.7向量下表運(yùn)算2、下標(biāo)的正整數(shù)運(yùn)算v為一個(gè)向量,下標(biāo)取值在1到length(v)之間,取值允許重復(fù),如:v<-10:20v[c(1,3,5,9)]v[1:5]v[c(1,2,3,2,1)]#other2.2.7向量下表運(yùn)算2、下標(biāo)的正整數(shù)運(yùn)算2.2.7向量下表運(yùn)算3、下標(biāo)的負(fù)整數(shù)運(yùn)算[注:表示扣除相應(yīng)的元素]v為一個(gè)向量,下標(biāo)取值在-length(v),到-1之間v[-c(1:5)]4、取字符型值得下標(biāo)向量在定義向量時(shí)可以給元素加上名字,如ages<-c(Li=33,Zhang=29,Liu=18)#元素可以通過下標(biāo)和名字來進(jìn)行訪問ages["Zhang"]#元素的名字也可以后加fruit<-c(5,10,2,20)names(fruit)<-c("orange","banana","apple","peach");fruit2.2.7向量下表運(yùn)算3、下標(biāo)的負(fù)整數(shù)運(yùn)算[注:表示扣除相應(yīng)2.3對(duì)象和它的模式與屬性R是一種基于對(duì)象的語(yǔ)言,R的對(duì)象包括了若干元素作為其數(shù)據(jù),另外,還可以有一些特殊數(shù)據(jù)稱為屬性(attribute),并規(guī)定了一些特定的操作(如打印、繪圖);R對(duì)象分為:?jiǎn)渭儗?duì)象、復(fù)合對(duì)象單純對(duì)象:所有元素都是一種基本類型,復(fù)合對(duì)象的元素可以是不同類型的對(duì)象;2.3對(duì)象和它的模式與屬性R是一種基于對(duì)象的語(yǔ)言,R的對(duì)象包2.3.1固有屬性:mode和lengthR對(duì)象都有兩個(gè)基本的屬性:mode(類型)屬性和length(長(zhǎng)度)屬性,比如向量的類型為logical(邏輯型)、numeric(數(shù)值型)、complex(復(fù)數(shù)型)、character(字符型),比如:mode(c(1,3,5)>5)R對(duì)象有一種特別的null(空值型)型,只有一個(gè)特殊的NULL值為這種類型,表示沒有值(不同于NA,NA是一種特殊值,而NULL根本沒有對(duì)象值)2.3.1固有屬性:mode和lengthR對(duì)象都有兩個(gè)基本2.3.1固有屬性:mode和length要判斷某對(duì)象是否某類型,有許多個(gè)類似于is.numeric()的函數(shù)可以完成.is.numeric(x)用來檢驗(yàn)對(duì)象x是否為數(shù)值型,它返回一個(gè)邏輯型結(jié)果.is.character()可以檢驗(yàn)對(duì)象是否為字符型,等等.如:z<-0:9is.numeric(z)is.character(z)長(zhǎng)度屬性表示R對(duì)象元素的個(gè)數(shù),比如length(2:4)length(z)2.3.1固有屬性:mode和length要判斷某對(duì)象是否某2.3.1固有屬性:mode和lengthR可以強(qiáng)制進(jìn)行類型轉(zhuǎn)換,例如digits<-as.character(z);digitsd<-as.numeric(digits);d2.3.1固有屬性:mode和lengthR可以強(qiáng)制進(jìn)行類型2.3.2修改對(duì)象的長(zhǎng)度對(duì)象可以取0長(zhǎng)度或正整數(shù)為長(zhǎng)度.R允許對(duì)超出對(duì)象長(zhǎng)度的下標(biāo)賦值,這時(shí)對(duì)象長(zhǎng)度自動(dòng)伸長(zhǎng)以包括此下標(biāo),未賦值的元素取缺失值(NA),例如:x<-numeric()x[3]<-17;x要增加對(duì)象的長(zhǎng)度只需作賦值運(yùn)算就可以了,如x<-1:3x<-1:4要縮短對(duì)象的長(zhǎng)度又怎么辦呢?只要給它賦一個(gè)長(zhǎng)度短的子集就可以]x<-x[l:2];xalpha<-1:10alpha<-alpha[2*1:5]alpha
length(alpha);alpha2.3.2修改對(duì)象的長(zhǎng)度對(duì)象可以取0長(zhǎng)度或正整數(shù)為長(zhǎng)度.2.3.3attributes()和attr()函數(shù)attributes(object)返回對(duì)象object的各特殊屬性組成的列表,不包括固有屬性mode和length.例如:x<-c(apple=2.5,orange=2.1);xattributes(x)可以用attr(object,name)的形式存取對(duì)象object的名為name的屬性,例如,attr(x,"names")也可以把a(bǔ)ttr()函數(shù)寫作賦值的左邊以改變屬性值或定義新的屬性,例如,attr(x,"names")<-c("applel","grapes");xattr(x,"type")<-"fruit";xattr(x,"type")2.3.3attributes()和attr()函數(shù)at2.3.4對(duì)象的class屬性在R中可以用特殊的class屬性來支持面向?qū)ο蟮木幊田L(fēng)格,對(duì)象的class屬性用來區(qū)分對(duì)象的類,可以寫出通用函數(shù)根據(jù)對(duì)象類的不同進(jìn)行不同的操作,比如,print()函數(shù)對(duì)于向量和矩陣的顯示方法就不同,plot()函數(shù)對(duì)不同類的自變量作不同的圖形。為了暫時(shí)去掉一個(gè)有類的對(duì)象的class屬性,可以使用unclass(object)函數(shù)。2.3.4對(duì)象的class屬性在R中可以用特殊的class屬2.4因子統(tǒng)計(jì)中的變量有幾種重要類別:區(qū)間變量、名義變量和有序變量,區(qū)間變量取連續(xù)的數(shù)值,可以進(jìn)行求和、平均值等運(yùn)算,名義變量和有序變量取離散值;可以用數(shù)值代表,也可以是字符型值,其具體數(shù)值沒有加減乘除的意義,不能用來計(jì)算,而只能用來分類或計(jì)數(shù),名義變量如性別、省份、職業(yè),有序變量如班級(jí)、名次。2.4因子統(tǒng)計(jì)中的變量有幾種重要類別:區(qū)間變量、名義變量和2.4.1factor()函數(shù)因?yàn)殡x散變量有各種不同表示方法,在R軟件中,為了統(tǒng)一起見,使用因子(factor)來表示這種類型的變量,例如,知道5位學(xué)生的性別,用因子變量表示sex<-c("M","F","M","M","F")sexf<-factor(sex);sexf可用函數(shù)levels()得到因子的水平,如sex.level<-levels(sexf);sex.level對(duì)于因子向量可用函數(shù)table()來統(tǒng)計(jì)各類數(shù)據(jù)的頻數(shù)sex.tab<-table(sexf);sex.tab2.4.1factor()函數(shù)因?yàn)殡x散變量有各種不同表示方2.4.2tapply()函數(shù)tapply()函數(shù)形式tapply(X,INDEX,FUN=NULL,...,simplify=TRUE)其中X是一對(duì)象,通常是一向量,INDEX是與X有同樣長(zhǎng)度的因子,F(xiàn)UN是需要計(jì)算的函數(shù),simplify是邏輯變量,取為TRUE(缺省)或FALSEheight<-c(174,165,180,171,160)tapply(height,sex,mean)2.4.2tapply()函數(shù)tapply()函數(shù)形式2.4.3gl()函數(shù)gl(n,k,length=n*k,labels=1:n,ordered=FALSE)其中n為水平數(shù),k為重復(fù)的次數(shù),length為結(jié)果的長(zhǎng)度,labels是一個(gè)n維向量,表示因子水平,ordered是邏輯變量,表示是否為有序因子,缺省值為FALSEgl(3,5)gl(3,1,15)2.4.3gl()函數(shù)gl(n,k,length=n2.5多維數(shù)組和矩陣2.5.1生成數(shù)組或矩陣數(shù)組(array)可以看成是帶多個(gè)下標(biāo)的類型相同的元素的集合,常用的是數(shù)值型的數(shù)組如矩陣,也可以有其它類型(如字符型、邏輯型、復(fù)數(shù)型).R可以很容易地生成和處理數(shù)組,特別是矩陣(二維數(shù)組).?dāng)?shù)組有一個(gè)特征屬性叫做維數(shù)向量(dim屬性),維數(shù)向量是一個(gè)元素取正整數(shù)值的向量,其長(zhǎng)度是數(shù)組的維數(shù),比如維數(shù)向量有兩個(gè)元素時(shí)數(shù)組為二維數(shù)組(矩陣).維數(shù)向量的每一個(gè)元素指定了該下標(biāo)的上界,下標(biāo)的下界總為1.2.5多維數(shù)組和矩陣2.5.1生成數(shù)組或矩陣2.5.1生成數(shù)組或矩陣1.將向量定義成數(shù)組向量只有定義了維數(shù)向量(dim屬性)后才能被看作是數(shù)組,比如:z<-1:12dim(z)<-c(3,4)注意:矩陣的元素是按列存放的,也可以把向量定義為一維數(shù)組,例如:dim(z)<-122.5.1生成數(shù)組或矩陣1.將向量定義成數(shù)組2.5.1生成數(shù)組或矩陣
2.用array()函數(shù)構(gòu)造多維數(shù)組
R軟件可以用array()函數(shù)直接構(gòu)造數(shù)組,其構(gòu)造形式為array(data=NA,dim=length(data),dimnames=NULL)其中data是一個(gè)向量數(shù)據(jù),dim是數(shù)組各維的長(zhǎng)度,缺省時(shí)為原向量的長(zhǎng)度.dimnames是數(shù)組維的名字,缺省時(shí)為空,如x<-array(1:20,dim=c(4,5))產(chǎn)生一個(gè)4x5的二維數(shù)組(矩陣)2.5.1生成數(shù)組或矩陣2.用array()函數(shù)構(gòu)造多2.5.1生成數(shù)組或矩陣另一種方式為z<-array(0,dim=c(3,4,2))它定義了一個(gè)3*4*2的三維數(shù)組,其元素均為0.這種方法常用來對(duì)數(shù)組作初始化3.用matrix()函數(shù)構(gòu)造矩陣函數(shù)matrix()是構(gòu)造矩陣(二維數(shù)組)的函數(shù),其構(gòu)造形式為
matrix(data=NA,nrow=l,ncol=l,byrow=FALSE,dimnames=NULL)2.5.1生成數(shù)組或矩陣另一種方式為2.5.1生成數(shù)組或矩陣其中data是一個(gè)向量數(shù)據(jù),nrow是矩陣的行數(shù),ncol是矩陣的列數(shù),當(dāng)byrow=TRUE時(shí),生成矩陣的數(shù)據(jù)按行放置,缺省時(shí)相當(dāng)于byrow=FALSE,數(shù)據(jù)按列放置.dimnames是數(shù)組維的名字,缺省時(shí)為空,如構(gòu)造一個(gè)3x5階的矩陣A<-matrix(1:15,nrow=3,ncol=5,byrow=TRUE)2.5.1生成數(shù)組或矩陣其中data是一個(gè)向量數(shù)據(jù),nr2.5.2數(shù)組下標(biāo)數(shù)組與向量一樣,可以對(duì)數(shù)組中的某些元素進(jìn)行訪問,或進(jìn)行運(yùn)算。1.?dāng)?shù)組下標(biāo)要訪問數(shù)組的某個(gè)元素,只要寫出數(shù)組名和方括號(hào)內(nèi)的用逗號(hào)分開的下標(biāo)即可,如a[2,1,2].如
a<-1:24dim(a)<-c(2,3,4)a[2,1,2]2.5.2數(shù)組下標(biāo)數(shù)組與向量一樣,可以對(duì)數(shù)組中的某些元素2.5.2數(shù)組下標(biāo)更進(jìn)一步還可以在每一個(gè)下標(biāo)位置寫一個(gè)下標(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]注意,因?yàn)榈谝痪S只有一個(gè)下標(biāo),所以退化了,得到的是一個(gè)維數(shù)向量為2×2的數(shù)組,另外,如果略寫某一維的下標(biāo),則表示該維全選,例如,a[1,,]2.5.2數(shù)組下標(biāo)更進(jìn)一步還可以在每一個(gè)下標(biāo)位置寫一個(gè)下2.5.2數(shù)組下標(biāo)a[,,]或a[]都表示整個(gè)數(shù)組,比如a[]<-0可以在不改變數(shù)組維數(shù)的條件下把元素都賦成0.還有一種特殊下標(biāo)辦法是對(duì)于數(shù)組只用一個(gè)下標(biāo)向量(是向量,不是數(shù)組),比如a[3:10]這時(shí)忽略數(shù)組的維數(shù)信息把表達(dá)式看作是對(duì)數(shù)組的數(shù)據(jù)向量取子集2.5.2數(shù)組下標(biāo)a[,,]或a[]都表示整個(gè)數(shù)組,比如2.5.2數(shù)組下標(biāo)2.不規(guī)則的數(shù)組下標(biāo)在R語(yǔ)言中,甚至可以把數(shù)組中的任意位置的元素作為數(shù)組訪問,其方法是用一個(gè)二維數(shù)組作為數(shù)組的下標(biāo),二維數(shù)組的每一行是一個(gè)元素的下標(biāo),列數(shù)為數(shù)組的維數(shù),例如,要把上面的形狀為2x3x4的數(shù)組a的第[1,1,1],[2,2,3],[1,3,4],[2,1,4]號(hào)共四個(gè)元素作為一個(gè)整體訪問,先定義一個(gè)包含這些下標(biāo)作為行的二維數(shù)組:b<-matrix(c(1,1,1,2,2,3,1,3,4,2,1,4),ncol=3,byrow=T)a[b]注意取出的是一個(gè)向量,我們還可以對(duì)這幾個(gè)元素賦值,如:a[b]<-c(101,102,103,104)或a[b]<-02.5.2數(shù)組下標(biāo)2.不規(guī)則的數(shù)組下標(biāo)2.5.3數(shù)組的四則運(yùn)算可以對(duì)數(shù)組之間進(jìn)行四則運(yùn)算(+、一、*、/),這時(shí)進(jìn)行的是數(shù)組對(duì)應(yīng)元素的四則運(yùn)算,參加運(yùn)算的數(shù)組一般應(yīng)該是相同形狀的(dim屬性完全相同).例如:A<-matrix(1:6,nrow=2,byrow=T);AB<-matrix(1:6,nrow=2);BC<-matrix(c(1,2,2,3,3,4),nrow=2);CD<-2*C+A/B;D2.5.3數(shù)組的四則運(yùn)算可以對(duì)數(shù)組之間進(jìn)行四則運(yùn)算(+、2.5.3數(shù)組的四則運(yùn)算形狀不一致的向量(或數(shù)組)也可以進(jìn)行四則運(yùn)算,一般的規(guī)則是將向量(或數(shù)組)中的數(shù)據(jù)與對(duì)應(yīng)向量(或數(shù)組)中的數(shù)據(jù)進(jìn)行運(yùn)算,把短向量(或數(shù)組)的數(shù)據(jù)循環(huán)使用,從而可以與長(zhǎng)向量(或數(shù)組)數(shù)據(jù)進(jìn)行匹配,并盡可能保留共同的數(shù)組屬性,例如,x1<-c(100,200)x2<-1:6x1+x2x3<-matrix(1:6,nrow=3)x1+x32.5.3數(shù)組的四則運(yùn)算形狀不一致的向量(或數(shù)組)也可以2.5.4矩陣的運(yùn)算1.轉(zhuǎn)置運(yùn)算對(duì)于矩陣A,函數(shù)t(A)表示矩陣4的轉(zhuǎn)置,即AT.如A<-matrix(1:6,nrow=2);A2.求方陣的行列式函數(shù)det()是求方陣行列式的值,如det(matrix(1:4,ncol=2))2.5.4矩陣的運(yùn)算1.轉(zhuǎn)置運(yùn)算2.5.4矩陣的運(yùn)算
3.向量的內(nèi)積對(duì)于n維向量x,可以看成n*l階矩陣或1*n階矩陣,若x與y是相同維數(shù)的向量,則x%*%y表示x與y作內(nèi)積.例如,x<-1:5;y<-2*1:5x%*%y函數(shù)crossprod()是內(nèi)積運(yùn)算函數(shù)(表示交叉乘積),crossprod(x,y)計(jì)算向量x與y的內(nèi)積,即’t(x)%*%y’.crossprod(x)表示x與y的內(nèi)積,即||x||22.
類似地,tcrossprod(x,y)表示’x%*%t(y)’,即x與y的外積,也稱為叉積.tcrossprod(x)表示x與x作外積2.5.4矩陣的運(yùn)算3.向量的內(nèi)積2.5.4矩陣的運(yùn)算
4.向量的外積(叉積)設(shè)x,y可是n維向量,則x%o%y表示x與y作外積.例如,x<-1:5;y<-2*1:5x%o%y函數(shù)outer()是外積運(yùn)算函數(shù),outer(x,y)計(jì)算向量x與y的外積,它等價(jià)于x%o%y.函數(shù)outer()的一般調(diào)用格式為:outer(X,Y,FUN="*",...)其中X,Y矩陣(或向量),fun是作外積運(yùn)算函數(shù),缺省值為乘法運(yùn)算2.5.4矩陣的運(yùn)算4.向量的外積(叉積)2.5.4矩陣的運(yùn)算5.矩陣的乘法如果矩陣A和B具有相同的維數(shù),則A*B表示矩陣中對(duì)應(yīng)的元素的乘積,A%*%B表示通常意義下的兩個(gè)矩陣的乘積(當(dāng)然要求矩陣A的列數(shù)等于矩陣B的行數(shù)).如A<-array(1:9,dim=(c(3,3)))B<-array(9:1,dim=(c(3,3)))C<-A*B;CD<-A%*%B;D2.5.4矩陣的運(yùn)算5.矩陣的乘法2.5.4矩陣的運(yùn)算由乘法的運(yùn)算規(guī)則可以看出,x%*%A%*%x表示的是二次型.函數(shù)crossprod(A,B)表示的是t(A)%*%B,函數(shù)tcrossprod(A,B)表示的是A%*%t(B)2.5.4矩陣的運(yùn)算由乘法的運(yùn)算規(guī)則可以看出,x%*%A2.5.4矩陣的運(yùn)算
6.生成對(duì)角陣和矩陣取對(duì)角運(yùn)算函數(shù)diag()依賴于它的變量,當(dāng)v是一個(gè)向量時(shí),diag(v)表示以v的元素為對(duì)角線元素的對(duì)角陣,當(dāng)M是一個(gè)矩陣時(shí),則diag(M)表示的是取M對(duì)角線上的元素的向量,如v<-c(1,4,5)diag(v)M<-array(1:9,dim=c(3,3))diag(M)2.5.4矩陣的運(yùn)算6.生成對(duì)角陣和矩陣取對(duì)角運(yùn)算2.5.4矩陣的運(yùn)算7.解線性方程組和求矩陣的逆矩陣若求解線性方程組Ax=b,其命令形式為so1ve(A,b),求矩陣A的逆,其命令形式為so1ve(A).A<-t(array(c(1:8,10),dim=c(3,3)))b<-c(1,1,1)x<-solve(A,b);xB<-solve(A);B2.5.4矩陣的運(yùn)算7.解線性方程組和求矩陣的逆矩陣2.5.4矩陣的運(yùn)算8.求矩陣的特征值與特征向量函數(shù)eigen(Sm)是求對(duì)稱矩陣Sm的特征值與特征向量,其命令形式為ev<-eigen(Sm)則ev存放著對(duì)稱矩陣Sm特征值和特征向量,是由列表形式給出的(有關(guān)列表的概念見2.6節(jié)),其中ev$values是Sm的特征值構(gòu)成的向量,ev$vectors是Sm的特征向量構(gòu)成的矩陣,如Sm<-crossprod(A,A)ev<-eigen(Sm);ev2.5.4矩陣的運(yùn)算8.求矩陣的特征值與特征向量2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)1.取矩陣的維數(shù)函數(shù)dim(A)得到矩陣A的維數(shù),函數(shù)nrow(A)得到矩陣A的行數(shù),函數(shù)ncol(A)得到矩陣A的列數(shù),如A<-matrix(1:6,nrow=2);Adim(A)nrow(A)ncol(A)2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)1.取矩陣的維數(shù)2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)
2.矩陣的合并函數(shù)cbind()把其自變量橫向拼成一個(gè)大矩陣,rbind()把其自變量縱向拼成一個(gè)大矩陣,cbind()的自變量是矩陣或看作列向量的向量時(shí),自變量的高度應(yīng)該相等,rbind()的自變量是矩陣或看作行向量的向量時(shí),自變量的寬度應(yīng)該相等,如果參與合并的自變量比其變量短,則循環(huán)補(bǔ)足后合并.如
x1<-rbind(c(1,2),c(3,4));x1x2<-10+x1x3<-cbind(x1,x2);x3x4<-rbind(x1,x2);x4cbind(1,x1)2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)2.矩陣的合并2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)3.矩陣的拉直設(shè)A是一個(gè)矩陣,則函數(shù)as.vector(A)就可以將矩陣轉(zhuǎn)化為向量,如A<-matrix(1:6,nrow=2);Aas.vector(A)4.?dāng)?shù)組的維名字?jǐn)?shù)組可以有一個(gè)屬性dimnames保存各維的各個(gè)下標(biāo)的名字,缺省時(shí)為NULL.如X<-matrix(1:6,ncol=2,dimnames=list(c("lone","two","three"),c("First","Second")),byrow=T);X2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)3.矩陣的拉直2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)也可以先定義矩陣x然后再為dimnames(X)賦值,例如,X<-matrix(1:6,ncol=2,byrow=T)dimnames(X)<-list(c("one","two","three"),c("First","Second"))對(duì)于矩陣,還可以使用屬性rownames和colnames來訪問行名與列名,例如,X<-matrix(1:6,ncol=2,byrow=T)colnames(X)<-c("First","Second")rownames(X)<-c("one","two","three")2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)也可以先定義矩陣x2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)5.?dāng)?shù)組的廣義轉(zhuǎn)置可以用aperm(A,perm)函數(shù)把數(shù)組A的各維按perm中指定的新次序重新排列,例如,A<-array(1:24,dim=c(2,3,4))B<-aperm(A,c(2,3,1))結(jié)果B把A的第2維移到了第1維,A的第3維移到了第2維,A的第1維移到了第三維,這時(shí)有B[i,j,k]=A[j,k,i].對(duì)于矩陣A,aperm(A,c(2,1))恰好是矩陣轉(zhuǎn)置,即t(A).2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)5.?dāng)?shù)組的廣義轉(zhuǎn)置2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)6.a(chǎn)pply函數(shù)對(duì)于向量,可以用sum、mean等函數(shù)對(duì)其進(jìn)行計(jì)算,對(duì)于數(shù)組(矩陣),如果想對(duì)其一維(或若干維)進(jìn)行某種計(jì)算,可用apply函數(shù),其一般形式為apply(A,MARGIN,FUN,...)其中A為一個(gè)數(shù)組,MARGIN是固定哪些維不變,F(xiàn)UN是用來計(jì)算的函數(shù),如A<-matrix(1:6,nrow=2);Aapply(A,1,sum)apply(A,2,mean)2.5.5與矩陣(數(shù)組)運(yùn)算有關(guān)的函數(shù)6.a(chǎn)pply函數(shù)2.6列表與數(shù)據(jù)框1.列表的構(gòu)造列表是一種特別的對(duì)象集合,它的元素也由序號(hào)(下標(biāo))區(qū)分,但是各元素的類型可以是任意對(duì)象,不同元素不必是同一類型,元素本身允許是其它復(fù)雜數(shù)據(jù)類型,比如,列表的一個(gè)元素也允許是列表,下面是如何構(gòu)造列表的例子.lst<-list(name=c("Fred","wife","Mary"),no.children=3,child.ages=c(4,7,9))列表元素總可以用“列表名[[下標(biāo)]]”的格式引用,例如,lst[[2]]lst[[3]][2]2.6列表與數(shù)據(jù)框1.列表的構(gòu)造2.6列表與數(shù)據(jù)框但是,列表不同于向量,我們每次只能引用一個(gè)元素,如lst[[1:2]]的用法是不允許的.注意:“列表名[下標(biāo)]”或“列表名[下標(biāo)范圍]”的用法也是合法的,但其意義與用兩重括號(hào)的記法完全不同,兩重記號(hào)取出列表的一個(gè)元素,結(jié)果與該元素類型相同,如果使用一重括號(hào),則結(jié)果是列表的一個(gè)子列表(結(jié)果類型仍為列表).在定義列表時(shí)如果指定了元素的名字(如lst中的name,wife,no.children,child.ages),則引用列表元素還可以用它的名字作為下標(biāo),格式為“列表名[["元素名"]]",如lst[["name"]]lst[["child.ages"]]2.6列表與數(shù)據(jù)框但是,列表不同于向量,我們每次只能引用2.6列表與數(shù)據(jù)框另一種格式是“列表名$元素名”,如lst$namelst$child.ages構(gòu)造列表的一般格式為lst<-list(name_l=object_l,...,name_m=object_m)其中name是列表元素的名稱,object是列表元素的對(duì)象2.6列表與數(shù)據(jù)框另一種格式是“列表名$元素名”,如2.6列表與數(shù)據(jù)框2.列表的修改列表的元素可以修改,只要把元素引用賦值即可,如將Fred改成John.lst$name<-"John"如果需要增加一項(xiàng)家庭收入,夫妻的收入分別是1980和1600,則輸入lst$income<-c(1980,1600)如果要?jiǎng)h除列表的某一項(xiàng),則將該項(xiàng)賦空值(NULL).幾個(gè)列表可以用連接函數(shù)c()連接起來,結(jié)果仍為一個(gè)列表,其元素為各自變量的列表元素,如list.ABC<-c(list.A,list.B,list.C)2.6列表與數(shù)據(jù)框2.列表的修改2.6列表與數(shù)據(jù)框3.返回值為列表的函數(shù)在R中,有許多函數(shù)的返回值是列表,如求特征值特征向量的函數(shù)eigen(),奇異值分解函數(shù)svd()和最小二乘函數(shù)數(shù)lsfit()等2.6列表與數(shù)據(jù)框3.返回值為列表的函數(shù)2.6.2數(shù)據(jù)框(data.frame)數(shù)據(jù)框是R的一種數(shù)據(jù)結(jié)構(gòu),它通常是矩陣形式的數(shù)據(jù),但矩陣各列可以是不同類型的,數(shù)據(jù)框每列是一個(gè)變量,每行是一個(gè)觀測(cè).但是,數(shù)據(jù)框有更一般的走義,它是一種特殊的列表對(duì)象,有一個(gè)值為"data.frame"的class屬性,各列表成員必須是向量(數(shù)值型、字符型、邏輯型)、因子、數(shù)值型矩、列表,或其它數(shù)據(jù)框,向量、因子成員為數(shù)據(jù)框提供一個(gè)變量,如果向量非數(shù)值型會(huì)被強(qiáng)制轉(zhuǎn)換為因子,而矩陣、列表、數(shù)據(jù)框這樣的成員為新數(shù)據(jù)框提供了和其列數(shù)、成員數(shù)、變量數(shù)相同個(gè)數(shù)的變量,作為數(shù)據(jù)框變量的向量、因子或矩陣必須具有相同的長(zhǎng)度(行數(shù)).2.6.2數(shù)據(jù)框(data.frame)數(shù)據(jù)框是R的一種2.6.2數(shù)據(jù)框(data.frame)盡管如此,一般還是可以把數(shù)據(jù)框看作是一種推廣了的矩陣,它可以用矩陣形式顯示,可以用對(duì)矩陣的下標(biāo)引用方法來引用其元素或子集.1.?dāng)?shù)據(jù)框的生成數(shù)據(jù)框可以用data.frame()函數(shù)生成,其用法與list()函數(shù)相同,各自變量變成數(shù)據(jù)框的成分,自變量可以命名,成為變量名,例如2.6.2數(shù)據(jù)框(data.frame)盡管如此,一般還2.6.2數(shù)據(jù)框(data.frame)df<-data.frame(Name=c("Alice","Becka","James","Jeffrey","John"),Sex=c("F","F","M","M","M"),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5));df2.6.2數(shù)據(jù)框(data.frame)df<-data2.6.2數(shù)據(jù)框(data.frame)如果一個(gè)列表的各個(gè)成分滿足數(shù)據(jù)框成分的要求,它可以用as.data.frame()函數(shù)強(qiáng)制轉(zhuǎn)換為數(shù)據(jù)框,比如,lst<-list(Name=c("Alice","Becka","James","Jeffrey","John"),Sex=c("F","F","M","M","M"),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5));lst#則as.data.frame(lst)是與df相同的數(shù)據(jù)框as.data.frame(lst)2.6.2數(shù)據(jù)框(data.frame)如果一個(gè)列表的各2.6.2數(shù)據(jù)框(data.frame)一個(gè)矩陣可以用data.frame()轉(zhuǎn)換為一個(gè)數(shù)據(jù)框,如果它原來有列名則其列名被作為數(shù)據(jù)框的變量名;否則系統(tǒng)自動(dòng)為矩陣的各列起一個(gè)變量名,如X<-array(1:6,c(2,3))data.frame(X)2.?dāng)?shù)據(jù)框的引用引用數(shù)據(jù)框元素的方法與引用矩陣元素的方法相同,可以使用下標(biāo)或下標(biāo)向量,也可以使用名字或名字向量,如df[1:2,3:5]2.6.2數(shù)據(jù)框(data.frame)一個(gè)矩陣可以用d2.6.2數(shù)據(jù)框(data.frame)數(shù)據(jù)框的各變量也可以用按列表引用(即用雙括號(hào)[[]]或$符號(hào)引用).如df[["Height"]]df$Weight數(shù)據(jù)框的變量名由屬性names定義,此屬性一定是非空的,數(shù)據(jù)框的各行也可以定義名字,可以用rownames屬性定義,如names(df)rownames(df)<-c("one","two","three","four","five")df2.6.2數(shù)據(jù)框(data.frame)數(shù)據(jù)框的各變量也75可編輯75可編輯2.6.2數(shù)據(jù)框(data.frame)3.a(chǎn)ttach()函數(shù)數(shù)據(jù)框的主要用途是保存統(tǒng)計(jì)建模的數(shù)據(jù).R的統(tǒng)計(jì)建模功能都需要以數(shù)據(jù)框?yàn)檩斎霐?shù)據(jù),我們也可以把數(shù)據(jù)框當(dāng)成一種矩陣來處理,在使用數(shù)據(jù)框的變量時(shí)可以用“數(shù)據(jù)框名$變量名”的記法,但是,這樣使用較麻煩,R提供了attach()函數(shù)可以把數(shù)據(jù)框中的變量“連接”到內(nèi)存中,這樣便于數(shù)據(jù)框數(shù)據(jù)的調(diào)用,例如,attach(df)r<-Height/Weight;r2.6.2數(shù)據(jù)框(data.frame)3.a(chǎn)ttach2.6.2數(shù)據(jù)框(data.frame)后一語(yǔ)句將在當(dāng)前工作空間建立一個(gè)新變量r,它不會(huì)自動(dòng)進(jìn)入!要把新變量賦值到數(shù)據(jù)框中,可以用df$r<一Height/Weight這樣的格式,為了取消連接,只要調(diào)用detach()(無(wú)參數(shù)即可).a(chǎn)ttach()除了可以連接數(shù)據(jù)框,也可以連接列表2.6.2數(shù)據(jù)框(data.frame)后一語(yǔ)句將在當(dāng)前2.6.3列表與數(shù)據(jù)框的編輯如果需要對(duì)列表或數(shù)據(jù)框中的數(shù)據(jù)進(jìn)行編輯,也可調(diào)用函數(shù)edit()進(jìn)行編輯、修改,其命令格式為dfnew<-edit(df)其中xold是原列表或數(shù)據(jù)框圖,xnew是修改后的列表或數(shù)據(jù)框,注意:原數(shù)據(jù)xold并沒有改動(dòng),改動(dòng)的數(shù)據(jù)存放在xnew中,函數(shù)edit()也可以對(duì)向量,數(shù)組或矩陣類型的數(shù)據(jù)進(jìn)行修改或編輯.2.6.3列表與數(shù)據(jù)框的編輯如果需要對(duì)列表或數(shù)據(jù)框中的數(shù)據(jù)進(jìn)2.7讀、寫數(shù)據(jù)文件在應(yīng)用統(tǒng)計(jì)學(xué)中,數(shù)據(jù)量一般是比較大的,變量也很多,如果用上述方法來建立數(shù)據(jù)集,是不可取的,上述方法適用于少量數(shù)據(jù)、少量變量的分析,對(duì)于大量數(shù)據(jù)和變量,一般應(yīng)在其他軟件中輸入(或數(shù)據(jù)來源是其他軟件的輸出結(jié)果),再讀到R中處理.R軟件有多種讀數(shù)據(jù)文件的方法。另外,所有的計(jì)算結(jié)果也不應(yīng)只在屏幕上輸出,應(yīng)當(dāng)保存在文件中,以備使用。2.7讀、寫數(shù)據(jù)文件在應(yīng)用統(tǒng)計(jì)學(xué)中,數(shù)據(jù)量一般是比較大的,變2.7.1讀純文本文件讀純文本文件有兩個(gè)函數(shù),一個(gè)是read.table()函數(shù),另一個(gè)是scan()函數(shù).1.read.table()函數(shù)read.table()函數(shù)是讀表格形式的文件,若“住宅”數(shù)據(jù)已經(jīng)輸入一個(gè)純文本文件”houses.data”中,其格式如下:其中第一行為變量名,第一列為記錄序號(hào)2.7.1讀純文本文件讀純文本文件有兩個(gè)函數(shù),一個(gè)是re2.7.1讀純文本文件利用read.table()函數(shù)可讀入數(shù)據(jù),如rt<-read.table("houses.data")此時(shí)變量rt是一個(gè)數(shù)據(jù)框,其形式與純文本文件“houses.data”格式相同,我們對(duì)它進(jìn)行測(cè)試,得到is.data.frame(rt)2.7.1讀純文本文件利用read.table()函數(shù)可2.7.1讀純文本文件如果數(shù)據(jù)文件中沒有第一列記錄序號(hào),如則相應(yīng)的命令改為rt<-read.table("houses2.data",header=TRUE)在rt會(huì)自動(dòng)加上記錄序號(hào)2.7.1讀純文本文件如果數(shù)據(jù)文件中沒有第一列記錄序號(hào),2.7.1讀純文本文件read.table函數(shù)的格式:read.table(file,header=FALSE,sep="",quote="\"'",dec=".",s,s,as.is=!stringsAsFactors,na.strings="NA",colClasses=NA,nrows=-1,skip=0,s=TRUE,fill=!blank.lines.skip,strip.white=FALSE,blank.lines.skip=TRUE,comment.char="#",allowEscapes=FALSE,flush=FALSE,stringsAsFactors=default.stringsAsFactors(),fileEncoding="",encoding="unknown")2.7.1讀純文本文件read.table函數(shù)的格式:2.7.1讀純文本文件2.scan()函數(shù)scan()函數(shù)可以直接讀純文本文件數(shù)據(jù),例如,有15名學(xué)生的體重?cái)?shù)據(jù)已經(jīng)輸入一個(gè)純文本文件"weight.data"中,其格式如下則w<-scan("weight.data")將文件中的15個(gè)數(shù)據(jù)讀入,并賦給向量w.2.7.1讀純文本文件2.scan()函數(shù)則2.7.1讀純文本文件假設(shè)數(shù)據(jù)中有不同的屬性,如下面是100名學(xué)生的身高和體重的數(shù)據(jù),放在純文本數(shù)據(jù)文件”h_w.data”,其中第1、3、5、7、9列是身高(cm),第2、4、6、8、10列是體重(kg),則inp<一scan("h_w.data",list(height=0,weight=0))將數(shù)據(jù)讀入,并以列表的方式賦給變量inp.2.7.1讀純文本文件假設(shè)數(shù)據(jù)中有不同的屬性,如下面是12.7.1讀純文本文件可以將由scan()讀入的數(shù)據(jù)存放成矩陣形式,如果將“weight.data”中的體重?cái)?shù)據(jù)放在一個(gè)3行5列的矩陣中,而且數(shù)據(jù)按行放置,其命令格式為X<-matrix(scan("weight.data",0),nrow=3,ncol=5,byrow=TRUE)2.7.1讀純文本文件可以將由scan()讀入的數(shù)據(jù)存放2.7.1讀純文本文件scan(file="",what=double(),nmax=-1,n=-1,sep="",quote=if(identical(sep,"\n"))""else"'\"",dec=".",skip=0,nlines=0,na.strings="NA",flush=FALSE,fill=FALSE,strip.white=FALSE,quiet=FALSE,blank.lines.skip=TRUE,multi.line=TRUE,comment.char="",allowEscapes=FALSE,fileEncoding="",encoding="unknown")2.7.1讀純文本文件scan(file="",w2.7.2讀其它格式的數(shù)據(jù)文件R軟件除了可以讀純文本文件外,還可以讀其他統(tǒng)計(jì)軟件格式的數(shù)據(jù),如Minitab、S-PLUS、SAS、SPSS等,要讀入其他格式數(shù)據(jù)庫(kù),必須先調(diào)入”foreign”模塊,它不屬于R的內(nèi)在模塊,需要在使用前調(diào)入,調(diào)入的方法很簡(jiǎn)便,只需鍵入命令:library(foreign)或用2.1.3節(jié)介紹的載入程序包調(diào)入。2.7.2讀其它格式的數(shù)據(jù)文件R軟件除了可以讀純文本文件2.7.2讀其它格式的數(shù)據(jù)文件已知數(shù)據(jù)由表2.2所示,分別存成SPSS數(shù)據(jù)文件(”educ_scores.sav")、SAS數(shù)據(jù)文件("educ_scores.xpt")、S-PLUS數(shù)據(jù)文件("educ_scores')和Stata數(shù)據(jù)文件("educ_scores.dta").讀SPSS文件的格式是:rs<-read.spss("educ_scores.sav")其變量rs是一個(gè)列表,如果打算形成數(shù)據(jù)框,則命令格式為rs<-read.spss("educ_scores.sav",to.data.frame=TRUE)2.7.2讀其它格式的數(shù)據(jù)文件已知數(shù)據(jù)由表2.2所示,分2.7.2讀其它格式的數(shù)據(jù)文件讀SAS文件的格式是:rx<-read.xport("educ_scores.xpt")其變量rx讀S-PLUS文件的格式是:rs<-read.S("educ_scores")其變量rs是一個(gè)數(shù)據(jù)框。讀Stata文件的格式是:rd<-read.dta("educ_scores.dta")其變量rd是一個(gè)數(shù)據(jù)框。是一個(gè)數(shù)據(jù)框。2.7.2讀其它格式的數(shù)據(jù)文件讀SAS文件的格式是:2.7.2讀其它格式的數(shù)據(jù)文件2.讀Excel數(shù)據(jù)文件將上述數(shù)據(jù)存為Excel表(”educ_scores.xls”),但R軟件無(wú)法直接讀Excel表,需要將Excel表進(jìn)入轉(zhuǎn)化成其他格式,然后才能被R軟件讀出。第一種轉(zhuǎn)化格式是將Excel表轉(zhuǎn)化成“文本文件(制表符分隔)”文件,Demo用函數(shù)read.delim()讀該文本文件,即rd<read.delim("educ_scores.txt")得到的變量rd是一個(gè)數(shù)據(jù)框2.7.2讀其它格式的數(shù)據(jù)文件2.讀Excel數(shù)據(jù)文件2.7.2讀其它格式的數(shù)據(jù)文件第二種轉(zhuǎn)化格式是將Excel表轉(zhuǎn)化成“CSV(逗號(hào)分隔)”文件,操作演示,用函數(shù)read.csv()讀該文本文件,即rc<-read.csv("educ_scores.csv")得到的變量rc是一個(gè)數(shù)據(jù)框。2.7.2讀其它格式的數(shù)據(jù)文件第二種轉(zhuǎn)化格式是將Exce2.7.3鏈接嵌入的數(shù)據(jù)庫(kù)R軟件中提供了50多個(gè)數(shù)據(jù)庫(kù)和其他可利用的軟件包,可以用data()函數(shù)調(diào)用這些數(shù)據(jù)庫(kù)與軟件包,用data()命令,列出在基本軟件包(base)所有可利用的數(shù)據(jù)集,如果裝載某一個(gè)數(shù)據(jù)集,只需在括號(hào)中加入相應(yīng)的名字,如data(infert)2.7.3鏈接嵌入的數(shù)據(jù)庫(kù)R軟件中提供了50多個(gè)數(shù)據(jù)庫(kù)和2.7.3鏈接嵌入的數(shù)據(jù)庫(kù)如果需要從其他的軟件包鏈接數(shù)據(jù),可以使用參數(shù)package,例如,data(package="nlme")data(Assay,package="nlme")如果一個(gè)軟件包已被library附加在庫(kù)中,則這個(gè)數(shù)據(jù)庫(kù)將自動(dòng)地被包含在其中,如library(nlme)data()data(Assay)Assay2.7.3鏈接嵌入的數(shù)據(jù)庫(kù)如果需要從其他的軟件包鏈接數(shù)據(jù)2.7.4寫數(shù)據(jù)文件1.write()函數(shù)write()函數(shù)寫數(shù)據(jù)文件的格式是write(x,file="data",ncolumns=if(is.character(x))1else5,append=FALSE,sep="")其中x是數(shù)據(jù),通常是矩陣,也可以是向量。file是文件名(缺省時(shí)文件名為”data”).a(chǎn)ppend=TRUE時(shí),在原文件上填加數(shù)據(jù);否則(FALSE,缺省值)寫一個(gè)新文件,其它參數(shù)見幫助文件。2.7.4寫數(shù)據(jù)文件1.write()函數(shù)2.7.4寫數(shù)據(jù)文件df<-data.frame(Name=c("Alice","Becka","James","jeffrey","John"),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5))write.table(df,file="foo.txt")write.csv(df,file="foo.csv")2.7.4寫數(shù)據(jù)文件df<-data.frame(2.7.4寫數(shù)據(jù)文件write.table(x,file="",append=FALSE,quote=TRUE,sep="",eol="\n",na="NA",dec=".",s=TRUE,s=TRUE,qmethod=c("escape","double"),fileEncoding="")write.csv(...)write.csv2(...)write.csvuses"."forthedecimalpointandacommafortheseparator.write.csv2usesacommaforthedecimalpointandasemicolonfortheseparator,theExcelconventionforCSVfilesinsomeWesternEuropeanlocales.2.7.4寫數(shù)據(jù)文件write.table(x,fil2.8控制流R是一個(gè)表達(dá)式語(yǔ)言,其任何一個(gè)語(yǔ)句都可以看成是一個(gè)表達(dá)式,表達(dá)式之間以分號(hào)分隔或用換行分隔,表達(dá)式可以續(xù)行,只要前一行不是完整表達(dá)式(比如末尾是加減乘除等運(yùn)算符,或有未配對(duì)的括號(hào))則下一行為上一行的繼續(xù)。若干個(gè)表達(dá)式可以放在一起組成一個(gè)復(fù)合表達(dá)式,作為一個(gè)表達(dá)式使用,組合用花括號(hào)“{}”表示。R語(yǔ)言也提供了其它高級(jí)程序語(yǔ)言共有的分支、循環(huán)等程序控制結(jié)構(gòu)。2.8控制流R是一個(gè)表達(dá)式語(yǔ)言,其任何一個(gè)語(yǔ)句都可以看成是一2.8.1分支語(yǔ)句分支語(yǔ)句有if/else語(yǔ)句、switch語(yǔ)句.
1.if/else語(yǔ)句
if/else語(yǔ)句是分支語(yǔ)句中主要的語(yǔ)句,if/else語(yǔ)句的格式為
if(cond)statement_lif(cond)statement_lelsestatement_2第一句的意義是:如果條件cond成立,則執(zhí)行表達(dá)式statement_l;否則跳過,第二句的意義是:如果條件cond成立,則執(zhí)行表達(dá)式statement_l;否則執(zhí)行表達(dá)式statement_分支語(yǔ)句分支語(yǔ)句有if/else語(yǔ)句、swit2.8.1分支語(yǔ)句例如,x<-c(2,3,1)if(any(x<=0))y<-log(1+x)elsey<-log(x)注意:此命令與下面的命令y<-if(any(x<=0))log(1+x)elselog(x)等價(jià),2.8.1分支語(yǔ)句例如,2.8.1分支語(yǔ)句對(duì)于if/else語(yǔ)句,還有下面的用法
if(cond_l)
statement_lelseif(cond_2)
statement_2elseif(cond_3)
statement_3elsestatement_42.8.1分支語(yǔ)句對(duì)于if/else語(yǔ)句,還有下面的用法2.8.1分支語(yǔ)句2.switch語(yǔ)句switch語(yǔ)句是多分支語(yǔ)句,其使用方法是switch(statement,list)其中statement是表達(dá)式,list是列表,可以用有名定義,如果表達(dá)式的返回值在1到length(list),則返回列表相應(yīng)位置的值;否則返回“NULL”值,例如,x<-3switch(x,2+2,mean(1:10),rnorm(4))switch(2,2+2,mean(1:10),rnorm(4))w<-switch(6,2+2,mean(1:10),rnorm(4))w2.8.1分支語(yǔ)句2.switch語(yǔ)句2.8.1分支語(yǔ)句當(dāng)list是有名定義時(shí),statement等于變量名時(shí),返回變量名對(duì)應(yīng)的值;否則返回“NULL”值,例如,y<-"fruit1"switch(y,fruit="banana",vegetable="broccoli",meat="beef")2.8.1分支語(yǔ)句當(dāng)list是有名定義時(shí),stateme2.8.2中止語(yǔ)句與空語(yǔ)句中止語(yǔ)句是break語(yǔ)句,break語(yǔ)句的作用是中止循環(huán),使程序跳到循環(huán)以外,空語(yǔ)句是next語(yǔ)句,next語(yǔ)句是繼續(xù)執(zhí)行,而不執(zhí)行某個(gè)實(shí)質(zhì)性的內(nèi)容,關(guān)于break語(yǔ)句和next話句的例子,將結(jié)合循環(huán)語(yǔ)句來說明2.8.2中止語(yǔ)句與空語(yǔ)句中止語(yǔ)句是break語(yǔ)句,2.8.3循環(huán)語(yǔ)句循環(huán)語(yǔ)句有for循環(huán)、while循環(huán)和repeat循環(huán)語(yǔ)句.1.for循環(huán)語(yǔ)句for循環(huán)的格式為for(nameinexpr_l)expr_2其中name是循環(huán)變量,expr_l是一個(gè)向量表達(dá)式(通常是個(gè)序列,如1:20),expr_2通常是一組表達(dá)式。如構(gòu)造一個(gè)4階的Hilbert矩陣:n<-4;x<-array(0,dim=c(n,n))for(iin1:n){for(jin1:n){x[i,j]<-1/(i+j-1)}}x2.8.3循環(huán)語(yǔ)句循環(huán)語(yǔ)句有for循環(huán)、while循環(huán)和re2.8.3循環(huán)語(yǔ)句2.while循環(huán)語(yǔ)句while循環(huán)語(yǔ)句while語(yǔ)句的格式為while(condition)expr當(dāng)條件condition成立,則執(zhí)行表達(dá)式expr.例如,編寫一個(gè)計(jì)算1000以內(nèi)的Fibonacci數(shù).f<-c(1,1)f[1]<-1;f[2]<-1;i<-1while(f[i]+f[i+1]<1000){f[i+2]<-f[i]+f[i+1]i<-i+1;}f2.8.3循環(huán)語(yǔ)句2.while循環(huán)語(yǔ)句2.8.3循環(huán)語(yǔ)句3.repeat循環(huán)語(yǔ)句repeat語(yǔ)句的格式為:repeatexprrepeat循環(huán)依賴break語(yǔ)句跳出循環(huán),例如,用repeat循環(huán)編寫一個(gè)計(jì)算1000以內(nèi)的Fibonacci數(shù)的程序.f<-1;f[2]<-1;i<-1repeat{f[i+2]<-f[i]+f[i+1]i<-i+1if(f[i]+f[i+1]>=1000)break}f2.8.3循環(huán)語(yǔ)句3.repeat循環(huán)語(yǔ)句2.9編寫自己的函數(shù)R軟件允許用戶自己創(chuàng)建模型的目標(biāo)函數(shù),有許多R函數(shù)存貯為特殊的內(nèi)部形式,并可以被進(jìn)一步的調(diào)用,這樣在使用時(shí)可以使語(yǔ)言更有力、更方便,而且程序也更美觀,學(xué)習(xí)寫自己的程序是你學(xué)習(xí)使用R語(yǔ)言的主要方法之一,事實(shí)上,R系統(tǒng)提供的絕大多數(shù)函數(shù),如mean(),var(),postscript()等,是系統(tǒng)編寫人員寫在R語(yǔ)言中的函數(shù),與你自己寫的函數(shù)本質(zhì)上沒有多大差別。2.9編寫自己的函數(shù)R軟件允許用戶自己創(chuàng)建模型的目標(biāo)函數(shù)2.9編寫自己的函數(shù)函數(shù)定義的格式如下,name<-function(arg_1,arg_2,...)expressionexpression是R中的表達(dá)式(通常是一組表達(dá)式),arg_1,arg_2,…表示函數(shù)的參數(shù),表達(dá)式中,放在程序最后的信息是函數(shù)的返回值,返回值可以是向量、數(shù)組(矩陣)、列表或數(shù)據(jù)框。調(diào)用函數(shù)的格式為name(expr_1,expr_2,…),并且在任何時(shí)調(diào)用都是合法的。在調(diào)用自己編寫的函數(shù)(程序)時(shí),需要將已寫好的函數(shù)調(diào)到內(nèi)存中,即使用2.1.3節(jié)介紹的“輸入R代碼…”命令,執(zhí)行source()函數(shù)。2.9編寫自己的函數(shù)函數(shù)定義的格式如下,2.9.1簡(jiǎn)單的例子與其他程序一樣,R可以很容易地編寫自己需要的函數(shù)例2.4編寫一個(gè)用二分法求非線性方程根的函數(shù),并求方程x3-x-1=1在區(qū)間[1,2]內(nèi)的根,精度要求ε=10-6.解:取初始區(qū)間[a,b],當(dāng)f(a)與f(b)異號(hào),作二分法計(jì)算;否則停止計(jì)算(輸出計(jì)算失敗信息).二分法計(jì)算過程如下:取中點(diǎn)x=(a+b)/2,若f(a)與f(x)異號(hào),則置b=x;否則a=x.當(dāng)區(qū)間長(zhǎng)度小于指定要求時(shí),停止計(jì)算。編寫二分法程序,程序名:bisect.R,參見演示。2.9.1簡(jiǎn)單的例子與其他程序一樣,R可以很容易地編寫自己需2.9.1簡(jiǎn)單的例子在二分法求根的函數(shù)(程序)中,輸入值f是求根的函數(shù),a,b是二分法的左右端點(diǎn).eps=le-5是精度要求,是有名參數(shù).函數(shù)(程序)的返回值是列表,當(dāng)初始區(qū)間不滿足要求時(shí),返回值為“findingrootisfail!"(求根失?。?;當(dāng)滿足終止條件時(shí),返回值為方程根的近似值和在近似點(diǎn)處的函數(shù)值。事實(shí)上,R軟件已提供了求一元方程根的函數(shù)uniroot(),其使用格式為:uniroot(f,interval,...,lower=min(interval),upper=max(interval),f.lower=f(lower,...),f.upper=f(upper,...),tol=.Machine$double.eps^0.25,maxiter=1000)上例求解:f<-function(x)x^3-x-1uniroot(f,c(1,2))2.9.1簡(jiǎn)單的例子在二分法求根的函數(shù)(程序)中,輸入值f是2.9.1簡(jiǎn)單的例子下面編寫一個(gè)與統(tǒng)計(jì)有關(guān)的函數(shù)一計(jì)算兩樣本的T統(tǒng)計(jì)量,例2.5已知兩樣本
A:79.9880.0480.0280.0480.0380.0380.0479.9780.0580.0380.0280.0080.02B:80.0279.9479.9879.9779.9780.0379.9579.97計(jì)算兩樣本的T統(tǒng)計(jì)量。2.9.1簡(jiǎn)單的例子下面編寫一個(gè)與統(tǒng)計(jì)有關(guān)的函數(shù)一計(jì)算兩樣本2.9.1簡(jiǎn)單的例子
2.9.1簡(jiǎn)單的例子
2.9.2定義新的二元運(yùn)算R軟件可以定義的二元運(yùn)算,其形式為%anything%.設(shè)x,y是兩個(gè)向量,定義x與y的內(nèi)積<x,y>=exp(-||x-y||2/2)其運(yùn)算符號(hào)用%!%表示,則二元運(yùn)算的定義如下"%!%"<-function(x,y){exp(-0.5*(x—y)%*%(x—y))}x%!%y"%@%"<-function(x,y){x*y}x<-1;y<-2;x%@%y2.9.2定義新的二元運(yùn)算R軟件可以定義的二元運(yùn)算,其形式為2.9.3有名參數(shù)與省缺如果用這種形式“name=object”給出被調(diào)用函數(shù)中的參數(shù),則這些參數(shù)可以按照任何順序給出.如定義如下函數(shù):funl<-function(data,data.frame,graph,limit){[functionbodyomitted]}則下面的三種調(diào)用方法
ans<-funl(d,df,TRUE,20)ans<-funl(d,df,graph=TRUE,limit=20)ans<-funl(data=d,limit=20,graph=TRUE,data.frame=df)都是等價(jià)的。2.9.3有名參數(shù)與省缺如果用這種形式“name=obj2.9.3有名參數(shù)與省缺
2.9.3有名參數(shù)與省缺
2.9.3有名參數(shù)與省缺其中J(x)為函數(shù)f(x)的Jacobi矩陣,即因此,相應(yīng)的程序(程序名:Newtons.R)為編寫求方程的函數(shù)(程序名:funs.R)下面求解該方程N(yùn)ewtons(funs,c(0,1))2.9.3有名參數(shù)與省缺其中J(x)為函數(shù)f(x)的Ja2.9.4遞歸函數(shù)
2.9.4遞歸函數(shù)
2.9.4遞歸函數(shù)程序的輸入變量,f是被積函數(shù),a,b是積分的端點(diǎn),eps是積分精度要求,缺省值為10-6.lim是對(duì)分區(qū)間的上限,缺省值為10,即被積區(qū)間最多被等分為210個(gè)子區(qū)間,輸出變量為積分值.a(chǎn)rea函數(shù)相當(dāng)于主程序,首先用梯形公式計(jì)算出積分的近似值,然后調(diào)用函數(shù)funl.funl函數(shù)相當(dāng)于子程序,該函數(shù)是采用遞歸的定義方式編寫的函數(shù),其意義是:將區(qū)間對(duì)分,采用復(fù)化求積公式,若本次的計(jì)算值與上一次的計(jì)算值相差小于精度要求eps或lim=O時(shí),則
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保型承臺(tái)施工合同標(biāo)準(zhǔn)文本3篇
- 2025年醫(yī)院神經(jīng)外科科室承包服務(wù)合同范本4篇
- 二零二五年度木板產(chǎn)品綠色認(rèn)證與質(zhì)量檢測(cè)合同4篇
- 2025年度電梯殘疾人專用電梯設(shè)計(jì)與安裝合同4篇
- 2025年度牧草烘干與儲(chǔ)存服務(wù)合同范本4篇
- 二零二五版生態(tài)園林苗木長(zhǎng)途運(yùn)輸合同標(biāo)準(zhǔn)范本3篇
- 2025年度個(gè)人聯(lián)保借款合同中小企業(yè)支持版
- 二零二五年度2025版?zhèn)€人二手車交易合同范本4篇
- 2025版農(nóng)村土地經(jīng)營(yíng)權(quán)抵押貸款合同樣本4篇
- 2025年度新型建筑用沖擊錘租賃與安裝服務(wù)合同3篇
- 數(shù)學(xué)-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 中儲(chǔ)糧黑龍江分公司社招2025年學(xué)習(xí)資料
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權(quán)轉(zhuǎn)讓協(xié)議書
- 物流有限公司安全生產(chǎn)專項(xiàng)整治三年行動(dòng)實(shí)施方案全國(guó)安全生產(chǎn)專項(xiàng)整治三年行動(dòng)計(jì)劃
- 2025屆江蘇省13市高三最后一卷生物試卷含解析
- 產(chǎn)鉗助產(chǎn)護(hù)理查房
- 中國(guó)象棋比賽規(guī)則
- 7天減肥餐食譜給你最能瘦的一周減肥食譜
- GB/T 31525-2015圖形標(biāo)志電動(dòng)汽車充換電設(shè)施標(biāo)志
評(píng)論
0/150
提交評(píng)論