




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
R軟件及其在金融定量分析中的應(yīng)用
1第1章R軟件基礎(chǔ)第一節(jié)工作環(huán)境第二節(jié)數(shù)據(jù)操作第三節(jié)常用命令第四節(jié)圖形制作第五節(jié)編程計(jì)算第六節(jié)常用程序包2第一節(jié)工作環(huán)境R的歷史與發(fā)展1993年根據(jù)AT&T貝爾實(shí)驗(yàn)室的RickBecker,JohnChambers和AllanWilks所開發(fā)的S語言為規(guī)范編寫而成1995年,R開始啟動(dòng)開源模式1997年,Chambers加入到R的創(chuàng)建隊(duì)伍,R得以快速發(fā)展現(xiàn)在,R儼然成為數(shù)據(jù)處理最重要的工具之一,成為統(tǒng)計(jì)學(xué)科工具軟件之首3R的資源R發(fā)展至今,已經(jīng)形成了層次豐富、形式多樣、來源廣泛的資源信息體系,主要包括:R開源平臺R官網(wǎng)及社區(qū)R出版物、R會議R學(xué)習(xí)交流網(wǎng)站以R搜索引擎R博客第一節(jié)工作環(huán)境4第一節(jié)工作環(huán)境RGUI(Rgraphicuser’sinterface)RGui可以在Linux、MacOSX、Windows三個(gè)平臺上運(yùn)行,用戶可根據(jù)實(shí)際需要下載與自己使用的平臺相對應(yīng)的版本RGui可通過輸入命令語句或程序代碼以實(shí)現(xiàn)數(shù)據(jù)集的建立、數(shù)據(jù)的分析以及統(tǒng)計(jì)作圖等操作RGui的界面比較簡單,由操作界面、輸出界面以及一系列的菜單和快捷鍵按鈕組成5第一節(jié)工作環(huán)境RGUI啟動(dòng)界面6第一節(jié)工作環(huán)境RGUI運(yùn)行界面7第一節(jié)工作環(huán)境R操作界面可實(shí)現(xiàn)的功能通過數(shù)據(jù)處理和存儲系統(tǒng)有效的進(jìn)行數(shù)據(jù)處理分析與存儲整合工作;通過數(shù)組運(yùn)算工具實(shí)現(xiàn)對向量、數(shù)組和數(shù)據(jù)矩陣的操作運(yùn)算;通過提供眾多適用于數(shù)據(jù)分析的工具以形成一套完整連貫的統(tǒng)計(jì)分析體系,進(jìn)而使得數(shù)據(jù)分析過程有序高效的進(jìn)行;通過優(yōu)秀的統(tǒng)計(jì)制圖功能使得可以對數(shù)據(jù)直接進(jìn)行分析和顯示,支撐各種數(shù)據(jù)的可視化輸出,并且可以適用于多種圖形設(shè)備之中;8第一節(jié)工作環(huán)境R操作界面可實(shí)現(xiàn)的功能通過使用條件語句、循環(huán)語句、用戶自定義函數(shù)以及輸入輸出接口等簡便而強(qiáng)大的編程語言使得程序設(shè)計(jì)得以簡潔、完善而高效,通過利用這些簡單的程序語言對數(shù)據(jù)處理過程加以描述,可以實(shí)現(xiàn)一個(gè)強(qiáng)大的數(shù)據(jù)分析功能;通過編寫命令語句實(shí)現(xiàn)操作循環(huán),R相對于下拉菜單式的統(tǒng)計(jì)軟件有一個(gè)顯著的優(yōu)勢,即是R可以將一系列連續(xù)的操作通過循環(huán)語句的形式進(jìn)行簡單地程序化管理,進(jìn)而有效避免大量的重復(fù)性工作;9第一節(jié)工作環(huán)境R操作界面可實(shí)現(xiàn)的功能通過將命令語句向量化簡化循環(huán)和控制結(jié)構(gòu),使其隱含在表達(dá)式之中。向量化可以使得命令代碼更為簡潔明了、代碼運(yùn)行更為快速、統(tǒng)計(jì)工作效率大大提高;將R代碼管理、工作空間載入和存儲管理、歷史記錄管理、路徑管理以及文件管理進(jìn)行集成整合,從而便于用戶執(zhí)行數(shù)據(jù)操作與文檔管理。10第一節(jié)工作環(huán)境RStudioRStudio是個(gè)跨平臺的且非常實(shí)用的R語言的IDE(IntegratedDevelopmentEnvironment),源于R軟件產(chǎn)品的RStudio是指可使得應(yīng)用程序編程語言多樣化且簡潔高效發(fā)展以及幫助提高R的使用效率的系列集成工具。通過RStudio可以方便快捷的編寫及管理命令代碼,有效編輯與執(zhí)行測試語句,集成管理各種軟件包及文檔材料。RStudio將R的環(huán)境、先進(jìn)的文本編輯器、R的幫助系統(tǒng)、版本控制以及更多的其他功能結(jié)合在一個(gè)單一的應(yīng)用程序之中。11第一節(jié)工作環(huán)境RStudio是一個(gè)自由開放的開源性軟件,具有如下優(yōu)勢:可以在同一界面中對R及R圖形進(jìn)行交互性操作;可以在組織管理命令代碼的同時(shí)維持多個(gè)項(xiàng)目之間的有序性;可以使研究過程及結(jié)果可再生與可復(fù)制;可以使軟件包置于R安裝的文件之中;可以創(chuàng)建并且分享代碼及報(bào)告結(jié)果;可以實(shí)現(xiàn)與其他用戶的合作。12第一節(jié)工作環(huán)境RStudio運(yùn)行界面13第一節(jié)工作環(huán)境常見的RStudio的功能特征功能特征功能介紹R控制臺集成RStudio對R控制臺進(jìn)行了調(diào)整使得可以直接在R控制臺中的輸入命令,也可以直接在腳本文件中執(zhí)行代碼語法高亮顯示通過對關(guān)鍵字或者函數(shù)進(jìn)行高亮顯示以方便閱讀代碼補(bǔ)全在輸入命令語句的中途按“Tab”鍵,RStudio會出現(xiàn)一個(gè)相應(yīng)匹配函數(shù)菜單,當(dāng)選定一個(gè)函數(shù),則該函數(shù)所對應(yīng)的參數(shù)和幫助說明均可以顯示快捷鍵支持在執(zhí)行一個(gè)常見任務(wù)時(shí),可以通過快捷鍵或快捷鍵組合來快速完成,例如智能縮進(jìn)等代碼導(dǎo)航可以有效實(shí)現(xiàn)執(zhí)行代碼與源代碼、函數(shù)使用與函數(shù)定義以及編輯文檔不同元素之間的快速轉(zhuǎn)換與快速移動(dòng)括號配對支持一旦選定并輸入一種括號或引號類型后,RStudio將會自動(dòng)完成對應(yīng)一半的類型匹配對象屬性瀏覽通過對象瀏覽窗口中可以查看正在運(yùn)行的R會話中每個(gè)對象的定義歷史文件瀏覽在歷史瀏覽窗口中可以查看所使用過的代碼,需要時(shí)還可以反復(fù)執(zhí)行它們幫助體系整合RStudio還通過瀏覽器搜索、查詢本地幫助文件以及提供上下文幫助等方式提供全面的幫助體系14第二節(jié)數(shù)據(jù)操作對象對象是R語言所創(chuàng)建和操作的實(shí)體,可以是變量、數(shù)組、字符串、函數(shù)以及由這些元素組成的其它結(jié)構(gòu)。在當(dāng)前工作路徑下存儲的所有對象組合稱為工作空間(workspace),可以用ls()或者objects()命令來顯示工作空間中所有的對象,也可以用rm()命令來清除工作空間中的對象,如:>ls()在R中演示character(0)輸出結(jié)果表示當(dāng)前工作空間里沒有數(shù)據(jù)對象。>x<-8
#創(chuàng)建變量x>ls()[1]"x"運(yùn)行結(jié)果表明當(dāng)前工作空間只有一個(gè)名稱為x的數(shù)據(jù)對象。>rm(x)#清除變量x>rm(list=ls())
#清除當(dāng)前空間中的所有對象15第二節(jié)數(shù)據(jù)操作對象對象的命名
在R的運(yùn)行過程中,對象根據(jù)名稱被創(chuàng)建和存儲,名稱可由所有的字母、數(shù)字以及它們的組合構(gòu)成,但是命名規(guī)則需要注意三點(diǎn):第一,名稱不能以數(shù)字開頭,如1a為非法變量名;第二,R對大小寫敏感,即B和b是不同的代號并表示不同的變量;第三,避免使用R里面的關(guān)鍵字作為對象名稱,比如t、c、head等。16第二節(jié)數(shù)據(jù)操作變量賦值
一個(gè)簡單的對象創(chuàng)建,可以通過四種方式來實(shí)現(xiàn)。例如,如果將變量x賦值為3,則其表達(dá)方式有以下4種:1.>x<-3;賦值操作符由小于(<)和減(-)兩個(gè)字符組成,緊靠在一起,形象地表明指向的那個(gè)是接受表達(dá)式值的對象,該方式最為常用。2.>3->x;該方式與(1)的操作符方向相反,二者表示的含義一致,但不符合使用習(xí)慣,很少用。3.>x=3;賦值操作符“=”號通常用于對象內(nèi)部元素或函數(shù)參數(shù)選項(xiàng)賦值,一般不主張采取該種方式對變量賦值。4.>assign("x",3);使用assign()函數(shù)進(jìn)行賦值,與上面的賦值方式等價(jià)。
如果一個(gè)表達(dá)式被視為一個(gè)完整命令,其值只需在終端顯示無需保存,則我們可以使用如下命令:>x*317第二節(jié)數(shù)據(jù)操作基本類型數(shù)值型數(shù)值型是對象中一個(gè)最簡單的類型,它包括整型、單精度實(shí)型和雙精度實(shí)型,默認(rèn)為雙精度實(shí)型。>x<-12>length(x)[1]1>class(x)[1]"numeric"結(jié)果說明對象x是長度為1的數(shù)值型變量。18第二節(jié)數(shù)據(jù)操作基本類型邏輯型邏輯型數(shù)據(jù)常用于邏輯或條件的判斷,取值為TRUE(T)或FALSE(F)兩種。>y<-TRUE>class(y)[1]"logical">length(y)[1]119第二節(jié)數(shù)據(jù)操作基本類型字符型
字符型變量的界定方式有雙引號“”和單引號‘’兩種,在雙引號引用情況下,若要輸出雙引號,則在反斜杠“\”后面加上引號即可;而在單引號引用情況下,則不需要添加反斜杠,直接添加雙引號,其演示代碼如下:>z<-"Display\"a\"string">w<-'Display"b"string'>cat(z)Display"a"string>cat(w)Display"b"string>class(z);class(w)[1]"character"[1]"character"20第二節(jié)數(shù)據(jù)操作基本類型復(fù)數(shù)型
R中支持復(fù)數(shù)運(yùn)算,形如a+bi形式的數(shù)據(jù)稱為復(fù)數(shù)。>m<-2+3i>class(m)[1]"complex">length(m)[1]1
在這些基本類型基礎(chǔ)上,R語言還能夠構(gòu)造出其它類型的對象,主要有以下七種:向量、數(shù)組、矩陣、數(shù)據(jù)框、列表、因子和表達(dá)式,它們大大地提高了R中數(shù)據(jù)操作的性能。21第二節(jié)數(shù)據(jù)操作向量向量是由同一基本類型元素構(gòu)成的序列,相當(dāng)于一維數(shù)組。若為數(shù)值型序列,則構(gòu)成的是數(shù)值向量,一般使用函數(shù)c()實(shí)現(xiàn)向量的賦值,可以有任意多個(gè)參數(shù),而它輸出的值則是一個(gè)把這些參數(shù)首尾相連形成的一個(gè)向量,并且可以通過下標(biāo)獲取其相應(yīng)參數(shù)。例如:創(chuàng)建一個(gè)含有4個(gè)數(shù)值組成的向量x,這四個(gè)值分別是1、3、5、7,命令如下:>x<-c(1,3,5,7)>x[1]1357>x[2][1]322第二節(jié)數(shù)據(jù)操作向量R可以生成有規(guī)律的序列,最簡單的使用“:”符號,形如a:b,它表示從a開始,逐項(xiàng)加1或減1,直到b為止,且“:”在符號運(yùn)算中級別最高。如:>y<-1:10>y[1]12345678910>1:10-1[1]0123456789>1:(10-1)[1]12345678923第二節(jié)數(shù)據(jù)操作向量若要生成任意等間隔的數(shù)據(jù),則可以使用函數(shù)seq()來實(shí)現(xiàn),形如seq(from,to,by),其中from表示序列的起始值,to表示序列的終止值,by為步長,如:>seq(1,10,3)[1]14710輸出結(jié)果顯示,這是一個(gè)以3為間隔的序列。>seq(1,10)[1]12345678910若我們關(guān)注的是數(shù)列長度,則可以通過語法:seq(下界,by,length)來實(shí)現(xiàn),by參數(shù)省略時(shí),默認(rèn)步長為1。如:>seq(1,by=3,length=4)[1]1471024第二節(jié)數(shù)據(jù)操作向量在產(chǎn)生序列時(shí),R提供的rep()函數(shù)可以重復(fù)某一個(gè)元素或?qū)ο?,其語法形式:rep(x,times,…)其中x是重復(fù)的元素或?qū)ο?,times表示重復(fù)的次數(shù)。如:>rep(1,3)[1]111上面是對單個(gè)元素1重復(fù)3次的結(jié)果,也可以對向量c(2,4)重復(fù)3次,如:>rep(c(2,4),3)[1]242424若要對c(2,4)中的每個(gè)元素進(jìn)行重復(fù)3次,則可以表示如下:>rep(c(2,4),each=3)[1]222444此外,rep()函數(shù)還可以嵌套使用,如:>rep(2:4,rep(2,3))[1]22334425第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣數(shù)組R語言中可以使用array()函數(shù)來生成數(shù)組,其語法形式:array(data=NA,dim=length(data),dimnames=NULL)其中data表示向量數(shù)據(jù),可以為空;dim是數(shù)組各維的長度;dimnames數(shù)組維度的名稱,默認(rèn)為空。如:>X<-array(1:30,dim=c(5,6))#創(chuàng)建一個(gè)5×6的二維數(shù)組>X
[,1][,2][,3][,4][,5][,6][1,]1
6
11162126[2,]2
71217
22
27[3,]3
8
1318
23
28[4,]49
1419
24
29[5,]5101520
25
30這里的二維數(shù)組實(shí)質(zhì)上就是一個(gè)矩陣,默認(rèn)數(shù)組的元素按列存放。26第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣數(shù)組>Z<-array(1:32,dim=c(4,4,2))#創(chuàng)建一個(gè)4×4×2的3維數(shù)組>Z,,1,,2
[,1][,2][,3][,4][,1][,2][,3][,4][1,]15
913[1,]17
21
2529[2,]26
1014[2,]18222630[3,]371115[3,]19
23
2731[4,]481216[4,]20
24
2832數(shù)組Z是一個(gè)三維數(shù)組,其中第一維有4個(gè)水平,第二維有4個(gè)水平,第三維有2個(gè)水平。27第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣數(shù)組如果要訪問數(shù)組Z的某個(gè)元素或某一維數(shù)據(jù),即只要寫出數(shù)組名和方括號內(nèi)用逗號隔開的下標(biāo),形如Z[i,j,k],其中i,j,k既可以是某一個(gè)數(shù)值也可以是一個(gè)數(shù)值向量,如:>Z[2,3,2]#取出第一維下標(biāo)為2,第二維下標(biāo)為3,第三維下標(biāo)為2的元素
[1]26此外,每一個(gè)下標(biāo)位置可以寫成一個(gè)下標(biāo)向量,表示這一維取出所有指定下標(biāo)的元素,如:>Z[1:3,2,1]#取出第一維下標(biāo)為1至3,第二維下標(biāo)為2,第三維下標(biāo)為1的所有元素[1]56728第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣矩陣實(shí)際上就是一個(gè)二維數(shù)組。矩陣中的元素必須為同一類型,數(shù)據(jù)以行和列的方式形成一個(gè)長方形表格,通常用行表示各個(gè)對象,用列表示不同變量。R語言有專門產(chǎn)生矩陣的函數(shù):matrix()函數(shù),其語法形式:matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)其中data是一個(gè)向量數(shù)據(jù),必須給定;nrow是矩陣的行數(shù);ncol是矩陣的列數(shù);byrow表示生成矩陣的數(shù)據(jù)存放方式,若取值為TRUE,則數(shù)據(jù)按行存放,否則,數(shù)據(jù)按列存放(默認(rèn)值);dimnames是數(shù)組維的名字,默認(rèn)為空。如:29第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣>matrix(seq(1:20),nrow=5,ncol=4)[,1][,2][,3][,4][1,]161116[2,]271217[3,]381318[4,]491419[5,]5101520上列結(jié)果顯示,生成了一個(gè)5行4列的矩陣,并且數(shù)據(jù)按列存放。30第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣>M<-matrix(seq(1:20),nrow=5,ncol=4,byrow=TRUE,dimnames=list(c("r1","r2","r3","r4","r5"),c("c1","c2","c3","c4")))>Mc1c2c3c4r11234r25678r39101112r413141516r517181920上列結(jié)果顯示,生成了一個(gè)5行4列的矩陣,并且數(shù)據(jù)按行存放,且更改了矩陣行和列的名字。31第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣如果我們要訪問矩陣M的某個(gè)元素或某列(行),則可以通過M[i,j]的形式來獲取,其與數(shù)組的索引方式相同。如:>M[2,3]#第2行第3列的元素[1]7>M[1:3,3]#第1至3行的第3列元素r1r2r3371132第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣若需要?jiǎng)h除某一行(列)或某幾行(列),則將相應(yīng)下標(biāo)取為負(fù)值或負(fù)向量即可,如:>M[-1,]
#刪除第1行的所有元素
c1c2c3c4r25678r39101112r413141516r517181920>M[1:3,-c(1,3)] #第1至3行,刪除第1列和第3列的所有元素
c2c4r124r268r3101233第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣在矩陣中,有一個(gè)特殊的函數(shù)diag(X),當(dāng)X為向量時(shí)則生成對角矩陣;當(dāng)X為矩陣時(shí)則返回X的對角元素,如:>diag(M)[1]161116>diag(1:3)[,1][,2][,3][1,]100[2,]020[3,]003 另外,通過調(diào)用diag()函數(shù)可以生成單位陣:>diag(3)#生成3階單位陣
[,1][,2][,3][1,]100[2,]010[3,]00134第二節(jié)數(shù)據(jù)操作數(shù)據(jù)與矩陣矩陣R中還提供了一些專門的函數(shù),比如lower.tri()和upper.tri()函數(shù),分別用來構(gòu)造上三角和下三角矩陣,二者的創(chuàng)建方式類似,以upper.tri()函數(shù)為例:>Tri<-matrix(1:9,3,3)>Tri[upper.tri(Tri)]<-0>Tri[,1][,2][,3][1,]100[2,]250[3,]36935第二節(jié)數(shù)據(jù)操作列表與數(shù)據(jù)框列表1.列表的創(chuàng)建列表可以通過list()函數(shù)來創(chuàng)建,其語法形式:list(name_1=object_1,name_2=object_2,…,name_k=object_k)其中name是列表元素的名稱,object是列表元素對象。下面構(gòu)造一個(gè)關(guān)于學(xué)生信息(姓名、學(xué)號、年齡、成績)的列表,如:>Stu.Lt<-list(name="ZhangSan",stu.no="20140224",age=21,grade=c(90,85,96))>Stu.Lt$name[1]"ZhangSan"$stu.no[1]"20140224"$age[1]21$grade[1]90859636第二節(jié)數(shù)據(jù)操作列表與數(shù)據(jù)框列表2.列表的訪問訪問列表中的某一元素或某一元素中的某一(組)數(shù)據(jù),可以通過以下四種方式來實(shí)現(xiàn):任何情況下都可以使用“列表名[[下標(biāo)]]”格式來訪問某一對象使用“列表名[下標(biāo)]”或“列表名[下標(biāo)范圍]”格式來訪問對象如果列表指定了元素的名稱,則可以將它的名字作為下標(biāo),格式為“列表名[[“元素名”]]”或“列表名[“元素名”]”通過格式“列表名$元素名”來引用列表中的元素37第二節(jié)數(shù)據(jù)操作列表與數(shù)據(jù)框列表3.列表的修改列表中的元素可以進(jìn)行增加、刪除和變更,如果在列表Stu.Lt增加一個(gè)活動(dòng)項(xiàng)目元素,項(xiàng)目內(nèi)容為“programming”和“sport”,則命令如下:>Stu.Lt$Project<-c("programming","sport")如果要?jiǎng)h除列表的某一項(xiàng),則將該項(xiàng)賦予空值(NULL)即可,在列表Stu.Lt中刪除stu.no元素,命令如下:>Stu.Lt$stu.no<-NULL若要變更列表中的元素,只要將相應(yīng)元素重新賦值即可,在列表Stu.Lt中將“ZhangSan”改為“LiSi”,則有命令:>Stu.Lt$name<-"LiSi"38第二節(jié)數(shù)據(jù)操作列表與數(shù)據(jù)框數(shù)據(jù)框1.數(shù)據(jù)框的創(chuàng)建數(shù)據(jù)框可以通過函數(shù)data.frame()生成,其語法形式為:data.frame(name_1=data_1,name_2=data_2,…,name_k=data_k)其中name是變量名稱,省略時(shí)獲得默認(rèn)變量名;data是各變量值,其用法與list()函數(shù)相同。如:>df<-data.frame(name=c("ZhangSan","XiaoHong","LiSi","XiaoLan"),sex=c("M","F","M","F"),age=c(20,21,19,20),weight=c(110,90,128,102))>dfnamesexageweight1ZhangSanM201102XiaoHongF21903LiSiM191284XiaoLanF20102 39第二節(jié)數(shù)據(jù)操作列表與數(shù)據(jù)框數(shù)據(jù)框1.數(shù)據(jù)框的創(chuàng)建當(dāng)然,數(shù)據(jù)框的各行也可以使用rownames()函數(shù)定義名字,如:>rownames(df)<-c("one","two","three","four")>dfnamesexageweightoneZhangSanM20110twoXiaoHongF2190threeLiSiM19128fourXiaoLanF2010240第二節(jié)數(shù)據(jù)操作列表與數(shù)據(jù)框數(shù)據(jù)框2.數(shù)據(jù)框的引用數(shù)據(jù)框元素的引用可以通過下標(biāo)或下標(biāo)變量,也可以使用元素名稱或名稱向量,其元素引用方式與矩陣元素的引用方法相同,如:>df[1:2,3:4]ageweightone20110two2190上列表示取出數(shù)據(jù)框df第1至2行的第3至4列數(shù)據(jù)。數(shù)據(jù)框也是一種特殊的列表,所以也能按照列表元素的索引方式來引用其元素(即用雙括號[[]]或$符號引用)。如:>df[["age"]][1]20211920>df$weight[1]1109012810241第二節(jié)數(shù)據(jù)操作因子一個(gè)因子既包括分類變量本身也包括變量不同的可能水平,生成因子可以使用factor()函數(shù),其語法形式:factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)其中x是向量;levels是因子水平向量,用于各離散值的指定,也可以由x的不同值來求得;labels用來指定各因子的標(biāo)簽,或者是各離散取值的對應(yīng)字符串;exclude用來指定要轉(zhuǎn)化為缺失值(NA)元素值集合,在levels指定的情況下,若因子的第“i”個(gè)元素與第“j”個(gè)元素相等,則元素值去掉“j”,若levels中不包含它的值,則對應(yīng)因子取值為NA;order是一個(gè)邏輯型變量,用來指定因子的水平是否有序,默認(rèn)為無序。詳見下面的代碼演示:42第二節(jié)數(shù)據(jù)操作>factor(1:4)[1]1234Levels:1234>factor(1:4,levels=1:2)[1]12<NA><NA>Levels:12>factor(c((1:4),(4:1)),labels=c("A","B","C","D"))[1]ABCDDCBALevels:ABCD>factor(1:4,exclude=2)[1]1<NA>34Levels:134>sex<-c("M","F","M","F")>sexf<-factor(sex)>sexf[1]MFMFLevels:FM函數(shù)levels()可以用來提取出因子的水平,如:>levels(sexf)[1]"F""M"進(jìn)一步,為了方便統(tǒng)計(jì)因子中各類水平數(shù)據(jù)的頻數(shù),R語言中提供了table()函數(shù),如:>table(sexf)sexfFM2243第二節(jié)數(shù)據(jù)操作表達(dá)式表達(dá)式類型的對象在R中有著重要地位,一個(gè)有效的命令就是一個(gè)表達(dá)式,但是在很多情況下,需要構(gòu)造一個(gè)不被求值的表達(dá)式,可以通過expression()函數(shù)來實(shí)現(xiàn),當(dāng)然也可以使用eval()函數(shù)對創(chuàng)建的表達(dá)式進(jìn)行計(jì)算。如:>e1<-12;e2<-3.5>f<-expression(sin(e1)+e2^2)>fexpression(sin(e1)+e2^2)>eval(f)[1]11.71343此外,還可以通過D()函數(shù)對表達(dá)式求偏導(dǎo),如果對表達(dá)式f分別求關(guān)于e1和e2的偏導(dǎo),則有:>D(f,"e1")cos(e1)>D(f,"e2")2*e244第二節(jié)數(shù)據(jù)操作對象的運(yùn)算類型轉(zhuǎn)換矩陣M轉(zhuǎn)化為向量>M.vec<-as.vector(M)>M.vec[1]123456789101112因子類型的對象轉(zhuǎn)化為數(shù)值型數(shù)據(jù)>M.frame<-as.data.frame(M)#將矩陣轉(zhuǎn)化為數(shù)據(jù)框>M.frameV1V2V3V4114710225811336912>ff1<-factor(c(4,8))>ff1[1]48Levels:48>as.numeric(ff1)[1]1245第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算符在R中演示1.數(shù)學(xué)運(yùn)算符加(+)、減(-)、乘(*)、除(/)、乘方(^)、模(%%)和整除(%/%),它既可作用于數(shù)值型或復(fù)數(shù)型變量,也可作用于邏輯型變量,但在后者情況下,邏輯型變量會被強(qiáng)制轉(zhuǎn)化為數(shù)值型,如:>x<-c(3,4)%%10>x[1]34這是向量的整除運(yùn)算,將向量中的每一個(gè)元素分別進(jìn)行整除。在數(shù)學(xué)運(yùn)算中,相對較為復(fù)雜的為數(shù)組,其運(yùn)算方式與矩陣相同,這里以矩陣為例進(jìn)行介紹,如:46第二節(jié)數(shù)據(jù)操作>y<-matrix(c(1:9),ncol=3)>z<-matrix(c(2:10),ncol=3)>z[lower.tri(z)]<-0 #生成一個(gè)上三角矩陣>y*z[,1][,2][,3][1,]22056[2,]03072[3,]0090這里的y*z表示矩陣對應(yīng)的元素相乘,而矩陣相乘要用y%*%z形式來實(shí)現(xiàn),如:>y%*%z[,1][,2][,3][1,]229114[2,]440141[3,]65116847第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算符2.比較運(yùn)算符小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)和不等于(!=),適合于任何類型的數(shù)據(jù),其結(jié)果是返回一個(gè)或幾個(gè)邏輯型值,它可作用于兩個(gè)被比較對象的每個(gè)元素上,而兩個(gè)對象的整體比較可以使用identical()和all.equal()函數(shù),如:>M<-c("A","B")>m<-c("a","b")>M==m[1]FALSEFALSE>identical(M,m)[1]FALSE>all.equal(M,m)[1]"2stringmismatches"48第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算符3.邏輯運(yùn)算符邏輯非(!)、邏輯與(&或&&)、邏輯或(|或||)、異或(xor),其中“&”和“|”作用在對象的每一個(gè)元素上,返回值與比較次數(shù)等長;“&&”和“||”只作用于對象的第一個(gè)元素。它可用于不等式的運(yùn)算,也可用于函數(shù)條件語句的表述,具體應(yīng)用,在后面章節(jié)會有所體現(xiàn)。49第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算函數(shù)1.向量運(yùn)算函數(shù)向量的運(yùn)算是對該向量的每一個(gè)元素都進(jìn)行同樣的運(yùn)算,在同一個(gè)表達(dá)式中向量的長度應(yīng)該一致,否則,短的向量在表達(dá)式中將會被循環(huán)使用,表達(dá)式輸出結(jié)果長度將和最長的向量相等。在實(shí)際應(yīng)用中,往往需要觀察數(shù)據(jù)的一些數(shù)學(xué)特征,比如均值、方差、中位數(shù)、排序等,如:>z<-c(1,5,4,7,9)>sum(z)[1]26>mean(z)[1]5.2>sd(z)[1]3.03315>median(z)[1]5>sort(z)[1]1457950第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算函數(shù)2.矩陣運(yùn)算函數(shù)矩陣的轉(zhuǎn)置矩陣的轉(zhuǎn)置有兩種函數(shù),一種是t()函數(shù),另一種是廣義轉(zhuǎn)置函數(shù)aperm()。矩陣的維數(shù)矩陣的維數(shù)可以通過dim()函數(shù)直接得到,也可以通過nrow()函數(shù)或ncol()函數(shù)得到矩陣的行數(shù)或列數(shù)。矩陣的合并函數(shù)rbind()用來將兩個(gè)或兩個(gè)以上的矩陣(向量)按行合并成一個(gè)大矩陣,但它們的列數(shù)必須相同,同理,cbind()函數(shù)按列合并矩陣(向量),并且行數(shù)必須相同。51第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算函數(shù)3.apply函數(shù)族apply函數(shù)對于向量類型的對象,可以使用sum()、mean()、cor()等函數(shù)對其進(jìn)行計(jì)算,那么要想對矩陣(數(shù)組)的某一維進(jìn)行某種計(jì)算,可以通過使用apply()函數(shù)來實(shí)現(xiàn),其語法形式:apply(X,MARGIN,FUN,…)其中X為一個(gè)矩陣(數(shù)組);MARGIN表示固定某些維不變,取1為對行調(diào)用函數(shù),取2為對列調(diào)用函數(shù);FUN表示要調(diào)用的函數(shù),它們可以為向量運(yùn)算函數(shù)。52第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算函數(shù)3.apply函數(shù)族tapply函數(shù)tapply()函數(shù)可進(jìn)行分組統(tǒng)計(jì),即根據(jù)因子、向量和調(diào)用函數(shù)計(jì)算,其語法形式:tapply(X,INDEX,FUN,...,simplify=TRUE)其中X通常為一個(gè)向量;INDEX需要是一個(gè)因子列表對象,否則,R可以用as.factor()函數(shù)將其強(qiáng)制轉(zhuǎn)換成因子,并且該列表中的每一個(gè)元素與X長度一致;FUN表示要調(diào)用的函數(shù);simplify是一個(gè)邏輯變量,若其值為FALSE,則函數(shù)tapply返回值是一個(gè)列表,若其為默認(rèn)值(TRUE),則函數(shù)tapply返回值是一個(gè)數(shù)組。53第二節(jié)數(shù)據(jù)操作對象的運(yùn)算運(yùn)算函數(shù)3.apply函數(shù)族lapply函數(shù)與sapply函數(shù)lapply()函數(shù)主要對列表對象調(diào)用函數(shù)進(jìn)行計(jì)算,它的返回值是一個(gè)列表,其語法形式為:lapply(X,FUN,…)sapply()函數(shù)是lapply()函數(shù)的一個(gè)特殊情形,對一些參數(shù)值進(jìn)行了設(shè)置,其語法形式為:sapply(X,FUN,...,simplify=TRUE,USE.NAMES=TRUE)lapply(*)與sapply(*,simplify=FALSE,USE.NAMES=FALSE)等價(jià),二者的返回值相同。54第三節(jié)常用命令工作目錄與R內(nèi)存查看當(dāng)前的工作目錄在R中演示>getwd()[1]"C:/Users/Administrator/Documents"改變當(dāng)前工作目錄setwd('F:/RCode/R-Book')只有當(dāng)RCode\R-Book目錄存在時(shí),這個(gè)命令才是有效的。注意:電腦中的目錄是“\”斜杠,而R語言命令中的工作目錄名稱引用是“/”斜杠。另外一種目錄引用方式為:>setwd('F:\\RCode\\R-Book')55第三節(jié)常用命令工作目錄與R內(nèi)存查看當(dāng)前已使用的內(nèi)存和已分配的內(nèi)存>memory.size(FALSE)#查看已使用的內(nèi)存[1]15.74>memory.size(TRUE)#查看已分配的內(nèi)存[1]16.69增大內(nèi)存>memory.size(4095)#將R的內(nèi)存增大為4095Mb[1]409556第三節(jié)常用命令保存與加載包的加載R提供的包里面有豐富的函數(shù),在使用前需要加載,可以調(diào)用library()函數(shù),如:>library(qrnn)這個(gè)命令將qrnn包加載到當(dāng)前工作空間,其中的函數(shù)可以直接調(diào)用,并可以使用search()命令顯示當(dāng)前工作空間中已經(jīng)存在的包,如:>search()[1]".GlobalEnv""package:qrnn""tools:rstudio""package:stats""package:graphics"[6]"package:grDevices""package:utils""package:datasets""package:methods""Autoloads"[11]"package:base57第三節(jié)常用命令保存與加載函數(shù)加載函數(shù)主要分為兩大類,一種是包中已有的函數(shù),另一種是自己編寫的函數(shù),前者直接調(diào)用即可,后者需要使用source()函數(shù)加載,形如:source(file=“函數(shù)路徑/函數(shù)名.R”)對象保存和加載R可以調(diào)用save.image()函數(shù)來保存當(dāng)前工作空間中的所有對象,并在當(dāng)前目錄下有.RData形式的文件生成,若只需要保存部分對象,則可以使用save()函數(shù),如:>save(x,y,file="F:/Rcode/S.RData")當(dāng)重新啟動(dòng)R后,可以通過load()函數(shù)將先前保存的對象加載到當(dāng)前工作空間,如:>load(file="F:/Rcode/S.RData")58第三節(jié)常用命令保存與加載圖片保存在繪圖時(shí),R若不指定制圖“設(shè)備”,則會打開一個(gè)默認(rèn)圖形顯示窗口。這里的“設(shè)備”其實(shí)就是一個(gè)文件,比如可以將jpg文件看成設(shè)備,如果想在jpg中制圖,那么首先先輸入jpg()命令打開設(shè)備文件;其次,調(diào)用繪圖函數(shù),其產(chǎn)生的圖形保存為.jpg格式文件;最后,關(guān)閉設(shè)備文件dev.off(),可以查看保存的圖片。第一種jpeg格式:>jpeg(file="Saveplot1.jpeg")>plot(iris)>dev.off()nulldevice1第二種ps格式:>postscript(file="Saveplot2.eps")
#eps格式的圖片可用于LATEX>plot(iris)>dev.off()nulldevice159第三節(jié)常用命令顯示命令使用head()或tail()函數(shù)查看向量、矩陣、數(shù)據(jù)框、表格或函數(shù)的前(后)幾行使用car包里的some()函數(shù)來查看上述對象的任意行使用對象名稱、print()函數(shù)和(對象)顯示對象的全部內(nèi)容60第三節(jié)常用命令掛接命令在調(diào)用數(shù)據(jù)框和列表對象中的變量時(shí),我們可以使用“數(shù)據(jù)框名(列表名)$變量名”方式,但這樣較繁瑣,R提供了attach()函數(shù)可以把它們的變量,鏈接到內(nèi)存中,可以直接使用“變量名”調(diào)用變量,如:>df<-data.frame(name=c("ZhangSan","XiaoHong","LiSi","XiaoLan"),sex=c("M","F","M","F"),age=c(20,21,19,20),weight=c(110,90,128,102))>attach(df)>mean(age)[1]20對于列表的掛接也是如此,若要取消這種掛接,可以使用detach()函數(shù),如:>detach(df)61第四節(jié)圖形制作繪圖函數(shù)高級繪圖函數(shù)高級繪圖函數(shù)可以根據(jù)數(shù)據(jù)顯示完整的圖形,常見的餅圖、直方圖、散點(diǎn)圖和箱圖等都可由高級繪圖函數(shù)直接繪制。1.plot()函數(shù)plot()是R中最常用的繪圖函數(shù),它是一個(gè)泛型函數(shù),可根據(jù)數(shù)據(jù)繪制出散點(diǎn)圖、曲線圖等。2.pairs()和coplot()函數(shù)當(dāng)響應(yīng)變量受到多個(gè)應(yīng)變量影響時(shí),R軟件中可以通過pairs()和coplot()兩個(gè)函數(shù)來實(shí)現(xiàn),二者的主要區(qū)別在于:pairs()函數(shù)只能顯示雙向關(guān)系,而coplot()函數(shù)能夠說明三變量甚至四變量關(guān)系,尤其是在給定應(yīng)變量條件下,可以判斷響應(yīng)變量如何變化。62第四節(jié)圖形制作繪圖函數(shù)低級繪圖函數(shù)高級繪圖函數(shù)繪制出的圖形往往不能達(dá)到預(yù)期的顯示效果,此時(shí),我們需要借助低級繪圖函數(shù)來做進(jìn)一步的補(bǔ)充,即在已有的圖形上添加新的圖形。1.在圖上加點(diǎn)
——
points()2.在圖上加線
——
lines()3.在圖上加標(biāo)題
——
title()4.在圖上加文本
——
text()/mtext()5.在圖上加圖例
——
legend()6.在圖上添加多邊形
——
polygon()7.
坐標(biāo)軸的設(shè)置
——
axis()63第四節(jié)圖形制作繪圖參數(shù)高級繪圖參數(shù)參數(shù)選項(xiàng)功能add=TRUE新的圖形疊加到前一個(gè)圖形上,默認(rèn)值為FALSE(表示新的圖形替換前一個(gè)圖形)axes=FALSE圖形不繪制坐標(biāo)軸,默認(rèn)值為TRUE(表示所繪圖形有坐標(biāo)軸)。type=“p”指定圖形的類型,默認(rèn)值為p(繪制點(diǎn)圖),“l(fā)”:繪實(shí)線,“b”:所有點(diǎn)被實(shí)線連接,“o”:實(shí)線通過所有的點(diǎn),“h”:垂直線,“s”:繪出階梯形曲線,垂直線頂端顯示數(shù)據(jù),“S”:繪出階梯形曲線,垂直線底端顯示數(shù)據(jù)xlim=c(a,b)指定x軸的顯示范圍在a和b之間ylim=c(m,n)指定y軸的顯示范圍在m和n之間xlab=“字符串”x軸標(biāo)簽,字符串的內(nèi)容是標(biāo)簽說明ylab=“字符串”y軸標(biāo)簽,字符串的內(nèi)容是標(biāo)簽說明main=“字符串”主標(biāo)題,字符串的內(nèi)容是對圖的說明sub=“字符串”副標(biāo)題,字符串的內(nèi)容是子圖的說明64第四節(jié)圖形制作繪圖參數(shù)par繪圖參數(shù)bty設(shè)置圖形邊框形狀。bg設(shè)置圖形背景顏色。adj控制文字的對齊方式。pch點(diǎn)的符號。pty設(shè)置繪圖區(qū)域的形狀。tck坐標(biāo)軸刻度線長度。
……65第四節(jié)圖形制作制圖案例
使用R軟件演示66第五節(jié)編程計(jì)算函數(shù)定義
R軟件中函數(shù)定義一般格式為:函數(shù)名<-function(參數(shù)列表){表達(dá)式}。函數(shù)定義有兩種方式:第一,直接在命令行中定義;第二,在一個(gè)r文件中定義。在命令行中定義R函數(shù),需要一行一行地錄入命令語句,顯得比較繁瑣,可以采用第三方軟件(如:記事本、RStudio等)進(jìn)行編輯。在RStudio環(huán)境中,定義函數(shù)如下:
定義函數(shù)這里,函數(shù)有兩個(gè)參數(shù):一個(gè)是x,需要是一個(gè)向量;另一個(gè)是plot.it,是一個(gè)邏輯變量,默認(rèn)值為TRUE。函數(shù)體中,通過兩個(gè)if語句對x進(jìn)行初始的判斷,如果x是數(shù)值型向量,則進(jìn)一步向下開始運(yùn)算。函數(shù)可以通過多種方式向外界輸出運(yùn)算結(jié)果:第一,打印輸出,如stop命令及其后面的信息;第二,圖形輸出,如hist等命令給出的結(jié)果;第三,返回結(jié)果,如return命令給出的結(jié)果。67第五節(jié)編程計(jì)算函數(shù)調(diào)用函數(shù)調(diào)用一般格式為:目標(biāo)變量<-函數(shù)名(參數(shù)列表),其中:函數(shù)名為經(jīng)過定義的函數(shù);目標(biāo)變量為通過函數(shù)運(yùn)算所得結(jié)果的保存位置。仍以1.4.3節(jié)(制圖案例)中的數(shù)據(jù)為基礎(chǔ),進(jìn)行描述性統(tǒng)計(jì)計(jì)算與正態(tài)性檢驗(yàn),對函數(shù)調(diào)用如下:SSEC_shjc_stat<-stat(x=SSEC_shjc[,2],plot.it=TRUE)SSEC_scgf_stat<-stat(x=SSEC_scgf[,2],plot.it=TRUE)SSEC_zggm_stat<-stat(x=SSEC_zggm[,2],plot.it=TRUE)stats<-rbind(SSEC_shjc_stat$stats,SSEC_scgf_stat$stats,SSEC_zggm_stat$stats)rownames(stats)<-c('shjc','scgf','zggm')print(stats)tests<-rbind(SSEC_shjc_stat$test,SSEC_scgf_stat$test,SSEC_zggm_stat$test)68第五節(jié)編程計(jì)算函數(shù)調(diào)用rownames(tests)<-c('shjc','scgf','zggm')print(tests)在調(diào)用stat函數(shù)時(shí),參數(shù)plot.it的取值可以給出,也可以忽略(忽略時(shí),取默認(rèn)值)。三個(gè)目標(biāo)變量:SSEC_shjc_stat、SSEC_scgf_stat、SSEC_zggm_stat,分別保存來自'shjc','scgf','zggm'的運(yùn)算結(jié)果。然后,通過rbind和print命令將運(yùn)算結(jié)果顯示出來。69第五節(jié)編程計(jì)算函數(shù)調(diào)試
一個(gè)復(fù)雜的程序設(shè)計(jì),不可避免會出現(xiàn)這樣或者那樣的錯(cuò)誤與問題,函數(shù)調(diào)試是糾正錯(cuò)誤與解決問題的重要手段。在R軟件中,提供了非常豐富的函數(shù)調(diào)試工具,主要有:browser函數(shù)、debug函數(shù)、traceback函數(shù)、browserText函數(shù)等。每個(gè)調(diào)試工具都有自己的特點(diǎn),可以適應(yīng)不同情況的函數(shù)調(diào)試工作。70第六節(jié)常用程序包標(biāo)準(zhǔn)包
R中的所有函數(shù)和數(shù)據(jù)集都被保存在包(packages)里面。標(biāo)準(zhǔn)包是R原代碼的重要構(gòu)成部分,包括了R工作的基本函數(shù),文檔描述中的數(shù)據(jù)集、標(biāo)準(zhǔn)統(tǒng)計(jì)和圖形工具。在R基本環(huán)境安裝后,其標(biāo)準(zhǔn)包就會隨著R的啟動(dòng)會直接調(diào)入內(nèi)存,可通過search函數(shù)查看:>search()[1]".GlobalEnv""package:stats""package:graphics"[4]"pa
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軟考網(wǎng)絡(luò)管理員考試復(fù)習(xí)指導(dǎo)試題及答案
- 2025年網(wǎng)絡(luò)管理員考試心得試題及答案
- 第二次月考提升卷(Unit 4、Unit 5)(含答案)-2024-2025學(xué)年人教精通版英語六年級下冊
- 學(xué)習(xí)云原生技術(shù)考試考題及答案解析
- 2025合同范本 租房協(xié)議書
- 2025法學(xué)概論考試的常見問題及試題及答案
- 學(xué)期重點(diǎn)項(xiàng)目與計(jì)劃推進(jìn)
- 保安人員心理素質(zhì)提升的實(shí)踐方案計(jì)劃
- 2025帶薪休假合同「下載」
- 信息處理技術(shù)員商務(wù)溝通題及答案
- 貴陽2024年貴州貴陽貴安事業(yè)單位招聘599人筆試歷年典型考題及考點(diǎn)附答案解析
- 成都市2022級(2025屆)高中畢業(yè)班摸底測試(零診)化學(xué)試卷(含答案)
- 老年期發(fā)育(人體發(fā)育學(xué))
- 修理廠員工安全合同協(xié)議書
- 術(shù)后吻合口瘺
- 陜西延安通和電業(yè)有限責(zé)任公司招聘筆試真題2021
- HYT 075-2005 海洋信息分類與代碼(正式版)
- 建筑用砂石料采購 投標(biāo)方案(技術(shù)方案)
- 融于教學(xué)的形成性評價(jià)讀書分享
- 廣東省廣州市八區(qū)聯(lián)考2024年高一數(shù)學(xué)第二學(xué)期期末考試模擬試題含解析
- 體質(zhì)外貌鑒定
評論
0/150
提交評論