作者:范素瑋 / 臺灣大學生態學與演化生物學所博士候選人
接續...R language簡介(上)
物件的種類、匯入匯出資料
在這裡要來說明一下在R語言資料儲存的格式。使用c()所指定物件,為一個向量(vector),即為一維的陣列(array)。利用指令dim()指定特定向量(vector),可以使一維向量會變多維陣列。也可以利用matrix()來指定二維的陣列,我們也為所建立好的陣列中的元素(element)指定名稱names() 或colnames()、rownames()。如果需要呼叫陣列物件中的任一個元素,使用物件名稱加上中括弧[a..],一維陣列時僅需一個索引值,二維陣列需兩碼並以逗號分隔,依此類推。在R中可使用read.table()由外部匯入資料,匯入的資料格式為一個二維的表格,稱為資料表(dataframe),同樣的,我們可以為每一個資料表的行或列命名,即colnames()、rownames(),並且使用「$」連結資料表名稱與其行名來取出該行的資料。在匯入外部資料時必須指定路徑,否則就應將資料儲存之平台的工作空間(workspace),你可以在「檔案」中的「變更現行目錄」修改所在的工作空間。在R還有一種資料格式稱為清單(list),清單可以儲存多個不同維數陣列及清單,以便於將程式所執行的結果放在一起輸出。如果要把演算好的資料輸出來備份或閱讀,可以使用write.table()將資料陣列儲存出來,未指定儲存位置時會存在工作空間中。
於R中建立自己的指令
指令function()可以用來建立程式物件,括號()用來設定自訂指定所需要給的參數。程式中用於運算的物件必須事先指定好,要於自訂程式中做替換的物件可以設為程式的參數,建立好的自訂指令就可以重複使用。使用程式時必須要根據當初制定參數的次序給予所需的物件,在自定程式中必須要指定儲存特定結果,否則執行完後就像沒有做一般將看視無所動靜,我們可以使用return()來輸出所需要的結果。在執行很長的演算過程中,主控台上並不會主動顯示任何訊息,如果需要了解執行狀態,可以使用cat()在主控台視窗上顯示執行狀態。
紀錄查詢、移除物件、指令查詢
在執行眾多演算及指定物件後,往往會不記得物件的名稱,可以利用ls()來查看目前主控台上的物件名稱,另外特別一提在R平台中,字母的大小寫是不相等的不可混用。rm()可以用來移除不需要物件。R語言也有貼心的設計,你可以使用?或help()來查詢已載入套件中程式指令的使用方式及範例。可以??或help.search()做關鍵字查詢,尋找所有R套件中可能相關的程式,查詢的結果則會在另外的視窗中顯現。
亂數產生器(Psudo-random number generator)
R是一個專門為資料處理及統計所設計的語言環境。有許多方便用來檢視資料的小程式,譬如你可以summary()來瞭解資料的情況,並可以進行許多統計的顯著性分析,如:anova()、x2test()。同時他內建有了許多常用的機率密度函數(probability density function),方便統計時計算機率密度值或是由設定的機率密度分佈中抽取隨機樣本。例如qnorm()可以用來查詢某個機率值在特定常態分佈中的值,而pnorm()則可以計算特定值在某常態分佈下的機率密度,runif()可以由unform分佈中抽取樣本。對於顯著性分析及模擬分析十分的便利。
用R來繪圖
R語言不但可以處理資料進行統計分析,也是一個繪圖展示工具,具有許多高階的圖形繪製指令,可以於電腦上直接展示圖像或輸出作為書面列印。R具有自己的LaTex-like的文件格式,在繪圖上不但可以得到高析度印刷等級圖像,也可以輸出網頁格式。在資料匯入之後,你可以利用hist()來檢視資料的分布情況,或利用plot()來繪製xy分布圖初步瞭解資料之間的關係。
所繪製的圖會於另一個視窗中呈現,每製作一張圖會將前一張圖覆蓋,可以使用windows()開啟另一個圖型視窗,或是使用par(mfrow=c())或par(mfcol=c())來控制一個視窗內繪製數個圖。繪圖之後,可以利用text()於圖上加上文字,lines()加上線條、points()加上點。par()中有多參數可以用來控制繪圖的色彩、線條類型、粗細、字型許多預設圖形的改變。R可以將圖片儲存為多種格式,如:Metafile、Postscript、Pdf、Png、Bmp、Tiff、Jpg。
由以上簡易的操作說明,應該可以了解R是一個非常有效的資料處理工具,並具有陣列及矩陣的演算能力及展示的繪圖工具,也具有簡單容易的程式設計語言,便於進行資料篩選、反覆演算、匯入/匯出資料及開發自訂程式功能。最後以三個族群競爭的成長模式為例,作一個使用R進行模擬分析示範。
首先利用function()將生產者、一、二級消費者三者的關係寫成下面的程式:
接下來設定想要模擬的時間長度、各關係式中的係數及各生物的族群起始數量,並利用package deSolve裡的建立的Runge-Kutta Method來解微分方程式,利用rk4()來求解模擬族群的變動。另外,設定一組不同的係數或起始值作另一個不同的模擬以作為比較。
並繪圖來瞭解族群的變化。
在package rgl中,更可以繪製3D圖來察看三個物種的變動關係。是不是發現一個複雜的分析就這麼簡單!
筆者將個人進行生態相關分析常用的一些套件整理於下,提供出初學者繼續參考練習。
表1、生態相關分析常用的一些套件。
套件名稱
|
說明
|
部份指令
|
Base
|
為基本安裝下的套件,已經包含許多常用的統計分析,如平均數、變異數、標準差計算、機率密度函數、回歸分析,變方分析、多變數分析、極值估算、傅力葉轉換、基本繪圖工具、建立自己的指令。
|
mean(), var(), sd()
rnorm()/qnorm..
lm()/nlm()
anova()
optim()
fft()
|
agricolae
|
由Felipe de Mendiburu所撰寫,用來分析農業上田間試驗的資料,可以進行多種multiple comparison、Factorial、complete or imcomplete block分析、拉丁方分析、生物歧異度指數。
|
HSD.test()
LSD.test()
path.analysis()
index.bio()…
|
vegan
|
由Jari Oksanen, Roeland Kindt, Pierre Legendre 等等理論生態學所撰寫,可以進行許多植群生態學常用的多變數分析。如計算歧異度指數、多種距離矩陣,進行主成分分析PCA、RDA、CCA等等,並可以進行繪圖及permutation test。
|
vegdist()
diversity()
rda()
plot.cca()
predict.cca()
anova.cca()
|
deSolve
|
由Karline Soetaert, Thomas Petzoldt, R. Woodrow Setzer等人撰寫。可以用來解微分方程式(ODE)。
|
lsoda()
rk4()
|
rgl
|
由Daniel Adler, Duncan Murdoch所撰寫,可以來繪製3D分布圖於另外的圖形是窗,圖形可以轉動以檢視數值於空間上的關係。
|
plot3d()
points3d()
lines3d()
|
在R語言官方版介紹中,特別提到使用「R 環境」的說法,是意指R是一個具有完整規劃且有一致性的系統,而不像一些資料分析軟體,不能再增長甚至不具有彈性。許多的人將它視為統計軟體,但其實R的開發團並不這定義他,並描述它是一個具有許多古典統計及現代統計技術的環境。R就像一個程式語言,可以讓人輕易的加上自己新功能。也有人以R建立較為人性的系統,提供人們依分析步驟進行一步一步演算方式的選擇。而對於計算繁複的分析工作,也可以呼叫連結較有效率的C、C++或Fortran等指令,進階使用者更可以使用C語言來直接控制R,這些相關的操作方式對於筆者來說已經過於複雜,有興趣者可以查詢官方網站。R能快速的擴張歸功於它的物件導向功能,具有執行使用者自訂功能及建立Package的能力。另外它在程式語彙上的彈性也是它容易編輯也成為擴展的優點,如果想創作自己的package可以參考官方版的手冊「Writing R Extensions」,一起來幫助非營利軟體的R成長吧。
有關R的參考資訊
-
R-project官方網站:http://www.r-project.org/官方網站提供相當多參考文件、套件的說明及下載。可以利用結合google的search來尋找相關的統計資訊,通常連很新的分析方法都可以找到。
-
R-Wiki:http://wiki.r-project.org/rwiki/doku.php
可以針對R中不同的套件有相似的統計分析或指令有系統的整理。
-
R-forge:http://r-forge.r-project.org/
提供R中心平台套件、R相關軟體及後續計畫的發展訓息。
-
The R Journal:http://journal.r-project.org/
最近才成立的R雜誌,提供R相關的報導及研究。
-
Simple R(中文網站):http://blog.xuite.net/yearend/r
入門者可多參考的部落格,淺顯易懂!
-
Learn R:http://www.fort.usgs.gov/BRDScience/LearnR.htm
提供完整的R教學。
-
Statistics with R:http://zoonek2.free.fr/UNIX/48_R/all.html
提供完整統計相關主題及許多R程式範例。