R語(yǔ)言初步 統(tǒng)計(jì)繪圖與編程.ppt_第1頁(yè)
R語(yǔ)言初步 統(tǒng)計(jì)繪圖與編程.ppt_第2頁(yè)
R語(yǔ)言初步 統(tǒng)計(jì)繪圖與編程.ppt_第3頁(yè)
R語(yǔ)言初步 統(tǒng)計(jì)繪圖與編程.ppt_第4頁(yè)
R語(yǔ)言初步 統(tǒng)計(jì)繪圖與編程.ppt_第5頁(yè)
已閱讀5頁(yè),還剩119頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,語(yǔ)言初步,張金龍 June 3, 2010, 數(shù)據(jù)處理、繪圖與編程,2,報(bào)告內(nèi)容,一 R簡(jiǎn)介 二 函數(shù)與對(duì)象 三 腳本編程 四 R繪圖 五 編寫(xiě)函數(shù) 六 數(shù)據(jù)保存,3,一 R 簡(jiǎn)介,4,什么是R?,圖1 R首頁(yè)的圖形 R是一種統(tǒng)計(jì)繪圖語(yǔ)言,也指實(shí)現(xiàn)該語(yǔ)言的軟件。,The R Project for Statistical Computing,5,簡(jiǎn) 史,R語(yǔ)言是從S統(tǒng)計(jì)繪圖語(yǔ)言演變而來(lái),可看作S的“方言”。 S語(yǔ)言上世紀(jì)70年代誕生于貝爾實(shí)驗(yàn)室,由Rick Becker, John Chambers, Allan Wilks開(kāi)發(fā)。 基于S語(yǔ)言開(kāi)發(fā)的商業(yè)軟件Splus,可以方便的編寫(xiě)函數(shù)、建

2、立模型,具有良好的擴(kuò)展性,在國(guó)外學(xué)術(shù)界應(yīng)用很廣。 1995年由新西蘭Auckland大學(xué)統(tǒng)計(jì)系的Robert Gentleman和Ross Ihaka,基于S語(yǔ)言的源代碼,編寫(xiě)了一能執(zhí)行S語(yǔ)言的軟件,并將該軟件的源代碼全部公開(kāi),這就是R軟件,其命令統(tǒng)稱(chēng)為R語(yǔ)言。,6,R的特點(diǎn),多領(lǐng)域的統(tǒng)計(jì)資源 目前在R網(wǎng)站上約有2400個(gè)程序包,涵蓋了基礎(chǔ)統(tǒng)計(jì)學(xué)、社會(huì)學(xué)、經(jīng)濟(jì)學(xué)、生態(tài)學(xué)、空間分析、系統(tǒng)發(fā)育分析、生物信息學(xué)等諸多方面。 跨平臺(tái) R可在多種操作系統(tǒng)下運(yùn)行,如Windows、MacOS、多種Linux和UNIX等。 命令行驅(qū)動(dòng) R即時(shí)解釋?zhuān)斎朊?,即可獲得相應(yīng)的結(jié)果。,7,為什么選擇R?,豐富的資

3、源 涵蓋了多種行業(yè)數(shù)據(jù)分析中幾乎所有的方法。 良好的擴(kuò)展性 十分方便得編寫(xiě)函數(shù)和程序包,跨平臺(tái),可以勝任復(fù)雜的數(shù)據(jù)分析、繪制精美的圖形。 完備的幫助系統(tǒng) 每個(gè)函數(shù)都有統(tǒng)一格式的幫助,運(yùn)行實(shí)例。 GNU軟件 免費(fèi)、軟件本身及程序包的源代碼公開(kāi)。,8,R與其他統(tǒng)計(jì)軟件比較,SAS: 速度快,有大量統(tǒng)計(jì)分析模塊,可擴(kuò)展性稍差,昂貴。 SPSS: 復(fù)雜的用戶(hù)圖形界面,簡(jiǎn)單易學(xué),但編程十分困難。 Splus: 運(yùn)行S語(yǔ)言,具有復(fù)雜的界面,與R完全兼容,昂貴。 ,9,R的缺點(diǎn),用戶(hù)需要對(duì)命令熟悉 與代碼打交道,需要記住常用命令。 占用內(nèi)存 所有的數(shù)據(jù)處理在內(nèi)存中進(jìn)行,不適于處理超大規(guī)模的數(shù)據(jù)。 運(yùn)行速度稍

4、慢 即時(shí)編譯,約相當(dāng)于C語(yǔ)言的1/20。 相比點(diǎn)擊鼠標(biāo)進(jìn)行操作,R仍能夠大大提高效率。,10,圖2 R軟件首頁(yè) /,11,CRAN,The Comprehensive R Archive Network 簡(jiǎn)稱(chēng)CRAN,由世界幾十個(gè)鏡像網(wǎng)站組成網(wǎng)絡(luò),提供下載安裝程序和相應(yīng)軟件包。各鏡像更新頻率一般為1-2天 推薦鏡像: 中國(guó)的鏡像:數(shù)學(xué)所 /mirrors/CRAN/ 即時(shí)更新的CRAN源 /,12,Windows下載和安裝R,CRAN: BinariesWindow

5、sbase 下載完成后,雙擊R-2.11.0-win32.exe 開(kāi)始安裝。 一直點(diǎn)擊下一步,各選項(xiàng)默認(rèn),語(yǔ)言建議選英文。,圖3 R2.11.0下載頁(yè)面,13,圖 4 R登陸界面(Windows版) 路徑: 開(kāi)始所有程序R 2.11.0,菜單欄,快捷按鈕,控制臺(tái),光標(biāo):等待輸入,14,圖 5 R Gui 的File菜單,15,圖 6 R Gui 的Edit菜單,16,圖 7 R Gui 的Packages菜單,17,圖 8 R Gui 的Help菜單,18,R程序包(R Packages),程序包是什么? R程序包是多個(gè)函數(shù)的集合,具有詳細(xì)的說(shuō)明和示例。 Window下的R程序包是經(jīng)過(guò)編譯的z

6、ip包。 每個(gè)程序包包含R函數(shù)、數(shù)據(jù)、幫助文件、描述文件等。 為什么要安裝程序包? R程序包是R功能擴(kuò)展,特定的分析功能,需要用相應(yīng)的程序包實(shí)現(xiàn)。 例如:系統(tǒng)發(fā)育分析,常用到ape程序包,群落生態(tài)學(xué)vegan包等。,19,常用R程序包(I),20,常用R程序包(II),21,常用R程序包(III),22,圖 9 CRAN Task Views: 對(duì)程序包的分類(lèi)介紹,CRAN Task Views,23,圖 10 vegan包頁(yè)面,三種平臺(tái)上的程序包,24,R程序包,在CRAN 提供了每個(gè)包的源代碼和編譯好的程序包 以vegan包為例,CRAN提供了: Package source: vegan

7、_1.17-2.tar.gz MacOS X binary: vegan_1.17-2.tgz Windows binary: vegan_1.17-2.zip Reference manual: vegan.pdf Window下程序包為zip文件,安裝時(shí)不要解壓縮。,25,安裝程序包的方法,1 用函數(shù) install.packages(), 如果已經(jīng)連接到互聯(lián)網(wǎng),在括號(hào)中輸入要安裝的程序包名稱(chēng),選擇鏡像后,程序?qū)⒆詣?dòng)下載并安裝程序包。 例如: 要安裝picante包,在控制臺(tái)中輸入 install.packages(picante) 2 安裝本地zip包 路徑:Packagesinstal

8、l packages from local files 選擇本地磁盤(pán)上存儲(chǔ)zip包的文件夾。,26,程序包使用,程序包的中函數(shù),都要先導(dǎo)入,再使用,因此導(dǎo)入程序包是第一步。 在控制臺(tái)中輸入如下命令: library(vegan) library(ade4) 程序包內(nèi)的函數(shù)的用法與R內(nèi)置的基本函數(shù)用法一樣。 library(vegan) This is vegan 1.17-2,27,查看程序包幫助文件,vegan 程序包內(nèi)部都有哪些函數(shù)?分別有什么功能? 查詢(xún)程序包內(nèi)容最常用的方法: 1 菜單 幫助Html幫助 2 查看pdf幫助文檔,28,查看函數(shù)的幫助文件,函數(shù)的默認(rèn)值是什么? 怎么使用?

9、 使用時(shí)需要注意什么問(wèn)題? 需要查詢(xún)函數(shù)的幫助。 1 ?t.test 2 RGuiHelpHtml help 3 apropos(t.test) 4 help(t.test) 5 help.search(t.test) 6 查看R包pdf手冊(cè),29,圖 11 R幫助文件的內(nèi)容與格式,30,幫助文件的內(nèi)容,lmstats #函數(shù)名及所在包 Fitting Linear Models #標(biāo)題 Description #函數(shù)描述 Usage #默認(rèn)選項(xiàng) Arguments #參數(shù) Details #詳情 Author(s) #作者 References #參考文獻(xiàn) Examples #舉例,31,練

10、習(xí)一 安裝R并導(dǎo)入程序包,1. 安裝R軟件、熟悉菜單 2. 安裝程序包 3. 調(diào)用程序包,查看程序包的幫助 library(vegan) library(ape) 查找ape包中plot.phylo函數(shù)的幫助 輸入 ?plot.phylo 將其中的Example粘貼到控制臺(tái)中,查看運(yùn)行的結(jié)果。,32,R圖形界面:R commander,R commander是R的圖形界面之一,是John Fox教授編寫(xiě)的,適用于不希望R編程的用戶(hù)。隨著用戶(hù)的操作,其窗口還可以顯示出相應(yīng)操作的R程序,對(duì)于初學(xué)者可能會(huì)有幫助。 安裝R commander install.packages(Rcmdr) R將自動(dòng)下

11、載并安裝Rcmdr所需的所有程序包,33,圖形界面之一:R Commander,圖 12 R commander 界面 library(Rcmdr),界面操作代碼,結(jié)果輸出,34,為什么要學(xué)習(xí)編程?,界面操作直觀(guān)易學(xué),但也存在一些不足: (1)操作的過(guò)程難以保存,數(shù)據(jù)處理不夠靈活,在進(jìn)行步驟繁多的數(shù)據(jù)處理工作時(shí)十分費(fèi)時(shí)費(fèi)力; (2)在建立模型或自己編寫(xiě)函數(shù)時(shí)也會(huì)遇到困難。 而這些困難可以通過(guò)編程解決。 要學(xué)習(xí)R編程,首先要了解R的函數(shù)、對(duì)象及其操作。,35,二 函數(shù)與對(duì)象,36,R的函數(shù),R是一種解釋性語(yǔ)言,輸入后可直接給出結(jié)果。 功能靠函數(shù)實(shí)現(xiàn)。 函數(shù)形式: 函數(shù)(輸入數(shù)據(jù),參數(shù)= ) 如果

12、沒(méi)有指定,則參數(shù)的以默認(rèn)值為準(zhǔn)。 例如: 平均值 mean(x, trim = 0, na.rm = FALSE, .) 線(xiàn)性模型 lm(yx, data=test),37,R的函數(shù),每一個(gè)函數(shù)執(zhí)行特定的功能,后面緊跟括號(hào),例如: 平均值 mean() 求和 sum() 繪圖 plot() 排序 sort() 除了基本的運(yùn)算之外,R的函數(shù)又分為”高級(jí)”和”低級(jí)”函數(shù),高級(jí)函數(shù)可調(diào)用低級(jí)函數(shù),這里的”高級(jí)”函數(shù)習(xí)慣上稱(chēng)為泛型函數(shù)。 如plot()就是泛型函數(shù),可以根據(jù)數(shù)據(jù)的類(lèi)型,調(diào)用底層的函數(shù),應(yīng)用相應(yīng)的方法繪制相應(yīng)的圖形。這就是面向?qū)ο缶幊痰乃枷搿?38,R有哪些函數(shù)?,查詢(xún)的方法:HelpH

13、tml helppackages log() log10() exp() sin() cos() tan() asin() acos(),binom.test() fisher.test() chisq.test() glm(y x1+x2+x3, binomial) friedman.test() mean() sd() var() .,39,圖13 箱線(xiàn)圖修飾前后(左:默認(rèn)值,右:修改屬性后) 函數(shù)的調(diào)用方法, 函數(shù)名() 如 plot(), lm(),并將對(duì)象放入括號(hào)中。,R函數(shù)調(diào)用及其選項(xiàng),40,R函數(shù)調(diào)用及其選項(xiàng),箱線(xiàn)圖繪制函數(shù)的調(diào)用 boxplot(daytype, data=ba

14、c, col=red, xlab=Virus, ylab=days) daytype,以type為橫軸,day為縱軸繪制箱線(xiàn)圖。 data=bac 數(shù)據(jù)來(lái)源bac col=“red” 箱線(xiàn)圖為紅色 xlab=“Virus” 橫軸名稱(chēng)為Virus ylab=“days” 縱軸名稱(chēng)為days,41,練習(xí)二:查詢(xún)函數(shù)幫助,查看boxplot的幫助文件 ?boxplot 查看最后的examples 將幫助文件中的內(nèi)容粘貼到控制臺(tái)中,運(yùn)行并觀(guān)看運(yùn)行結(jié)果。 boxplot(count spray, data = InsectSprays, col = lightgray) 參數(shù)更改 boxplot(cou

15、nt spray, data = InsectSprays, col = red, xlab=spray, ylab=counts),42,賦值與注釋,在控制臺(tái)中鍵入如下命令 2 + 2 a 代替 b - 2 c - a+b c #注釋,賦值符號(hào),43,如何為對(duì)象起名?,R處理的所有數(shù)據(jù)、變量、函數(shù)和結(jié)果都以對(duì)象的形式保存。 1. 區(qū)分大小寫(xiě),注意China和china的不同。 2. 不能用數(shù)字作為變量,對(duì)象也不能用數(shù)字開(kāi)頭,但是數(shù)字可以放在中間或結(jié)尾,如2result與result2,后者是合法的。 3. 建議不要用過(guò)短的名稱(chēng)??梢杂谩?”作為間隔,例如 anova.result1。 4.

16、不要使用保留名: NA, NaN, pi, LETTERS, letters, month.abb, ,44,元素的類(lèi)型,對(duì)象是由各元素組成的。每個(gè)元素,都有自己的數(shù)據(jù)類(lèi)型 數(shù)值型 Numeric 如 100, 0, -4.335 字符型 Character 如 “China” 邏輯型 Logical 如TRUE, FALSE 因子型 Factor 表示不同類(lèi)別 復(fù)數(shù)型 Complex 如:2 + 3i,45,對(duì)象的類(lèi)(class),向量(vector) 一系列元素的組合。 如 c(1,2,3); c(a,a,b,b,c) 因子(factor) 因子是一個(gè)分類(lèi)變量 c(a,

17、a,b,b,c) 矩陣(matrix) 二維的數(shù)據(jù)表,是數(shù)組的一個(gè)特例 x - 1:12 ; dim(x) - c(3,4) ,1 ,2 ,3 ,4 1, 1 4 7 10 2, 2 5 8 11 3, 3 6 9 12,46,對(duì)象的類(lèi),數(shù)組(array) 數(shù)組是k維的數(shù)據(jù)表(k in 1:n, n 為正整數(shù))。 向量(n = 1) 矩陣(n = 2) 高維數(shù)組(n = 3) 數(shù)據(jù)框(dataframe) 是由一個(gè)或幾個(gè)向量和(或)因子構(gòu)成,它們必須是等長(zhǎng)的,但可以是不同的數(shù)據(jù)類(lèi)型。 列表(list) 列表可以包含任何類(lèi)型的對(duì)象。 可以包含向量、矩陣、高維數(shù)組,也可以包含列表,47,運(yùn)算符,數(shù)

18、學(xué)運(yùn)算 運(yùn)算后給出數(shù)值結(jié)果 +, -, *, /, (冪) 比較運(yùn)算 運(yùn)算后給出判別結(jié)果(TRUE FALSE) , =, =, != 邏輯運(yùn)算 與、或、非 !, #引用第5個(gè)元素 intake.prec(3,5,7) #引用第3,5,7個(gè)元素 v - c(3,5,7); intake.prev; intake.pre1:5; #引用第1到5個(gè)元素 intake.pre-c(3,5,7) #去除第3,5,7元素,73,數(shù)據(jù)框內(nèi)元素的引用,intake - data.frame(intake.pre, intake.post) 引用數(shù)據(jù)框中的元素 (1) $ 引用列,后面為列的名稱(chēng) 例如 int

19、ake$intake.pre (2) ,方括號(hào)引用,逗號(hào)前為行,逗號(hào)后為列 intake,1; 引用第1列 intake5,; 引用第5行 intake5,1; 引用第1列,第5行 i = 1:5; intakei, 引用1到5行,74,列表內(nèi)元素的引用,列表內(nèi)元素的引用可以用” 如 list1c(1,2,3) 上述放于”內(nèi)的數(shù)字,稱(chēng)為下標(biāo)。通過(guò)下標(biāo)的變化,可以方便的訪(fǎng)問(wèn)向量、數(shù)據(jù)框、矩陣、列表內(nèi)的各元素。熟悉下標(biāo)的用法對(duì)掌握循環(huán)結(jié)構(gòu)是非常重要的。,75,訪(fǎng)問(wèn)數(shù)據(jù)框內(nèi)的元素,直接調(diào)用數(shù)據(jù)框內(nèi)的列,以列的名稱(chēng)作為向量的名稱(chēng) attatch() detatch() 在函數(shù)內(nèi)部,對(duì)數(shù)據(jù)進(jìn)行相應(yīng)調(diào)整

20、with() #with函數(shù)內(nèi)部形成一個(gè)空間,在這個(gè)空間中,函數(shù)可以對(duì)列訪(fǎng)問(wèn)。 within() transform() #數(shù)據(jù)的轉(zhuǎn)換,如取log subset() #取數(shù)據(jù)的子集 apply() #對(duì)數(shù)據(jù)表或矩陣應(yīng)用某個(gè)函數(shù),可減少循環(huán),76,條件篩選,條件篩選是先對(duì)變量否滿(mǎn)足條件進(jìn)行判斷,滿(mǎn)足為T(mén)RUE,不滿(mǎn)足為FALSE。之后再用邏輯值對(duì)向量?jī)?nèi)的元素進(jìn)行篩選。 intake.pre 7000 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE intake.preintake.pre 7000 intake.pr

21、e 7000 axis(at=seq(0.2,1.8,0.2), side=2) 4.補(bǔ)齊散點(diǎn)圖的邊框 box() 5.添加標(biāo)題、副標(biāo)題、橫軸說(shuō)明、縱軸說(shuō)明 title(main=Main title, sub=subtitle, xlab=x-label, ylab=y-label),105,圖25 分步繪圖,106,一頁(yè)多圖,圖26 一頁(yè)多圖 par() par(mfrow=c(2,2) .,107,在原有圖形上添加元素,舉例: x - rnorm(100) # 生成隨機(jī)數(shù) hist(x,freq=F) # 繪制直方圖 curve(dnorm(x),add=T) # 添加曲線(xiàn) h - hi

22、st(x, plot=F) # 繪制直方圖 ylim - range(0, h$density, dnorm(0) #設(shè)定縱軸的取值范圍 hist(x, freq=F, ylim=ylim) #繪制直方圖 curve(dnorm(x),add=T,col=red) #添加曲線(xiàn),108,圖27 在原有直方圖上添加曲線(xiàn),109,練習(xí)八:繪圖練習(xí),練習(xí)1 將Rplots.r中的代碼拷貝到R控制臺(tái)中,查看R繪制的圖形。 練習(xí)2 對(duì)例進(jìn)行回歸分析,并繪制散點(diǎn)圖,并為散點(diǎn)圖添加回歸直線(xiàn)。 plot(impurityrate) reg-lm(impurityrate) abline(reg,col=red)

23、 summary(reg),110,五 編寫(xiě)函數(shù),111,編程基礎(chǔ),R可以靈活的編寫(xiě)程序,用戶(hù)自己編寫(xiě)的程序可以直接調(diào)用。編程時(shí)無(wú)需聲明變量的類(lèi)型,這與C,C+等語(yǔ)言不同。 基本格式 函數(shù)名 - function(數(shù)據(jù),參數(shù)1= 默認(rèn)值,) 異常處理; 表達(dá)式(循環(huán)/判別); return(返回值); 函數(shù)內(nèi)部也可用#添加注釋,112,函數(shù)實(shí)例,圖28 函數(shù)實(shí)例 data2mat(),113,程序流程控制 if,if(條件) 表達(dá)式 if(條件) 表達(dá)式1 else 表達(dá)式2 舉例 p = 0.03 if(p 0.05!) ,114,循環(huán) for, while,for(變量 in 向量) 表達(dá)

24、式 用法: for(i in 1:10) print(i) while(條件) 表達(dá)式 用法: i - 1 while(i10) print(i); i - i + 1,115,返回值,返回值表示函數(shù)輸出的結(jié)果。 返回值必須是一個(gè)對(duì)象。 R默認(rèn)將最后一行作為返回值。 如果函數(shù)的結(jié)果需要有多個(gè)返回值,可以創(chuàng)建一個(gè)list(),并返回該對(duì)象。 也可以用return()函數(shù),設(shè)定返回值。 但是一個(gè)函數(shù)的返回的對(duì)象只有一個(gè)。,116,異常處理,如數(shù)據(jù)輸入不能滿(mǎn)足要求,或者參數(shù)設(shè)定錯(cuò)誤等等,可能造成函數(shù)給出錯(cuò)誤的結(jié)果,則需要對(duì)函數(shù)的運(yùn)行過(guò)程發(fā)出警告或終止,以提高程序的穩(wěn)健性。 警告的寫(xiě)法 if(any(

25、is.na(inputdata) inputdata - na.omit(inputdata) cat(“NAs are found in the input data, and has been removed.n) 終止的寫(xiě)法 if(any(is.na(xx) stop(NAs are not allowed!n),117,函數(shù)舉例,問(wèn)題:輸入直角三角形的兩個(gè)邊長(zhǎng),求其斜邊長(zhǎng)。 定義函數(shù): rcal - function(x,y) z - x2 + y2 result - sqrt(z) return(result) 調(diào)用函數(shù): rcal(3,4),118,練習(xí)九 編寫(xiě)函數(shù),編寫(xiě)一個(gè)函數(shù),給出兩個(gè)數(shù)之后,直接給出這兩個(gè)數(shù)的平方和。 sqtest-function(x, y) z1=x2; z2=y2; z3=z1+z2; return(z3); ,119,六 數(shù)據(jù)保存,120,write.table() write.csv() save.image() sink() unlink() 若有LaTeX基礎(chǔ),可以用 Sweave() 函數(shù) 該函數(shù)能將腳本、程序說(shuō)明和運(yùn)算結(jié)果

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論