R語言編程

R語言編程

R語言是統計、計算和可視化的高級語言。開源,有可擴展的軟體包和眾多的套用。

1.R語言編程特徵

1.1 R語言數據結構

R語言數據結構其實以數據類型的方式出現,有數據框,數組、向量和矩陣,因子和列表。數據框dataframe是統計專業常用數據集,而因子factor是分類所用的方法,表明了R語言鮮明的經濟統計色彩。向量vector類似一維數組,但是沒有行名和列名,只有標籤names。數組array包括一維數組,二維數組和三維數組和多維數組,三維數組有行、列和層,有行名rownames和列名colnames。矩陣matrix是二維數組,但是具有矩陣計算的性質。列表list不僅具有c語言結構struct的特徵,而且性質是向量,因此是數據結構中的廣義表。

R語言的數據結構中,沒有樹和圖。樹可用靜態數組實現,套用索引方法。而圖在軟體包igraph中提供的函式實現,R語言的圖稱為網路數據格式,所以能分析生物結構和計算機網路。

R語言數據結構有三個屬性:

1.標籤(name),數據結構的每一個元素的標籤是一個字元向量,被稱為賦予名字。
2.維度(dimension),向量沒有維度,數組和矩陣有維度。因此,維度函式dim(x)用來將向量轉換成矩陣和數組。
3.類(class),是面向對象技術的S3對象系統。

1.2 R語言是高級語言

R語言有程式的控制結構和函式function。儘管R語言是解釋型語言,但是可以用編譯的方式實現,調用方法是source(file.R)命令。R語言的軟體包能在編程環境中,通過子選單下載後安裝,因此是無障礙的。現在軟體包有7000多,在統計、數學計算、金融數據分析、生物學、網際網路數據分析,大數據、並行計算,混合編程、數據挖掘、數據分析方面有實際套用。

程式中載入軟體包的命令,

>library(parallel) #並行計算軟體包,單執行緒多核

查找軟體包中所有函式,

>library(help=parallel)

>help(packet=parallel)

R語言和解釋型語言一樣,沒有變數聲明。R語言能編寫c++程式,套用Rcpp軟體包。R語言沒有獨立的標量,僅僅循環語句使用標量作為循環變數。詳細介紹見行業百科的R語言百科 。

1.3 R語言編程風格

統計方式的R語言,稱為數據操作,僅僅是用命令處理數據,將數據分組,參數估計與結果檢驗。金融數據分析,則是建立模型,檢驗模型數據擬合效果,因此數據操作好像沒有明顯的編程意義,實質上沒有明顯的程式風格。

但是,金融數據分析建立模型有標準過程,比如GARCH模型常有最少4個階段或步驟,數據性質、ARCH效應、建立GARCH模型和模型擬合優度的檢測與模型係數和參數調整。因此統計分析仍然有程式標準過程,因此能表現程式設計師的編程能力和特有風格。

計算機專業的R語言,稱為編程的藝術。因子的套用方法、混合編程、並行程式設計、編寫軟體包,都是需要高超的編程技術和鮮明的編程風格,因此不同軟體包的函式的程式運行時間不同。

R語言程式執行時間的函式是system.time(function),參數是系統執行的函式function。

2. R語言程式設計

2.1 R語言編程方法

R語言處理三種問題,1.數據操作。包括統計分析,例如有害健康調查時有多少吸菸的人,分組數據等; 2.金融數據分析,需要建立經濟統計模型,例如建立ARIMA模型; 3.問題處理,譬如數據挖掘、高級語言程式設計、並行計算等。三個問題的編程方法不同。數據操作關鍵是根據每一個命令的結果選擇下一個命令,需要豐富的實際經驗和精明強幹的問題控制能力。輸出命令結果的方法有plot圖,箱式圖等,更高水平是套用高質量報表。高質量報表直觀看和商場pos機的憑條類似,可根據精確的數據進行選擇。建立經濟統計模型的效果根據編程人員的專業能力決定。有時,模型數據擬合效果比較合理,然而不能進行詳細的專業解釋和問題分析,因此不能進一步提高模型的優度,使計算機輔助數據分析的功能受到減弱。建立模型的標準過程在教材和參考書中有分析,但是細節的掌握,表明了工作人員仔細的程度不同,程式的有效性、精確測度就不同。第三個問題是計算機專業人員套用R語言的問題,不僅要求計算機軟體的編程能力和理論套用能力,而且對R語言的掌握有標準 。

2.2 計算機專業掌握R語言的標準

(1)能用R語言程式處理數據框的所有問題,實現分組數據和統計 ,實現數據結構編程,例如樹、圖等。

(2)能用R語言實現並行計算,windows系統的軟體包parallel,Rmpi,snow等,多核和多計算機集群系統。

(3)能用R語言實現混合編程,能實現多核多執行緒。譬如:C/C++,java,python,fortran。

(4)能用R語言處理大量數據。能編寫高性能程式處理幾萬條數據,實現大型資料庫oracle和windows的SQL處理數據.

(5)能用R語言實現圖形界面。R語言是流程式語言,但是很難實現程式的圖形界面。shiny軟體包可實現HTML套用。

(6)能用R語言生成高質量報表。直觀地看R語言報表類似pos機的憑條。

(7)能用R語言程式實現數據挖掘技術,比如k-means,關聯規則等。能用R語言實現hadoop,實現對大數據的處理。

(8)能用R語言實現數據分析,譬如:金融數據分析、生物、會計財務、商業與銷售、電信與通信、交通、醫療、新藥研發以及運輸物流。

2.3 R語言並行計算

並行計算有實際套用的有多核多執行緒,例如python、java、c++,MPI和openMP,R語言軟體包是parallel,Rmpi,snow等,以及GPU計算的CUDA,R語言使用gputools軟體包。R語言並行計算能實現單執行緒多核與集群方式,但是問題是不能實現多核多執行緒,因此要在調用python、java和c++編程環境調用R語言程式。混合編程的程式執行時間是關注的問題,C++處理程式執行時間的函式見下。

1.Linux系統

在程式program1執行前,在命令行用參數time ./progarm1。程式實現方法則是:

#include<sys/time.h> #時間處理頭檔案

#include<stdio.h>

#include<math.h>#數學頭檔案

void functionsample(){#需要執行的函式

unsigned int i,j;

double y;

for(i=0;i<1000;i++)

for(j=0;j<1000;j++)

y=sin((double)i); #計算正弦函式1000000次

}

main(){

struct timeval tpstart,tpend;

float timeuse;

gettimeofday(&tpstart,NULL); #tpstart 開始時間

functionsample(); #執行函式functionsample

gettimeofday(&tpend,NULL); #tpend 結束時間

timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ tpend.tv_usec-tpstart.tv_usec;

timeuse/=1000000;

printf("Used Time:%f\n",timeuse); #float型變數

exit(0);

}

輸出結果: Used Time:0.556070 (參考網際網路文章)

2.windows系統

#include<time.h>

套用函式clock(),類型clock_t,返回程式執行開始到調用此函式間的時間段的毫秒數。clock_t是一個長整型,常量CLOCKS_PER_SEC表示一秒鐘有多少個時鐘計時單元,常量定義見下。

#define CLOCKS_PER_SEC ((clock_t)1000)

example1.計算循環語句的執行時間

int main(){

clock_t startTime, endTime; #定義開始和結束時間

startTime=clock();

for(inti=0;i<1000000;i++)#需要計算執行時間的循環時間

{i++;

}

endTime=clock();

cout<<"TotleTime:"<<(double)(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl;

system("pause");

return0;

}

2.4 R 語言編程的高級套用

(1)R語言編寫高質量報表

table是R語言生成統計報表的基礎。我們看到醫學化驗單、影像報表的形式,都是醫學專業、簡潔、數學表示的,R語言的統計和計算特徵與此相似。製作高質量報表被稱為“展示你最好的一面”。在R語言編程環境或RStudio圖形環境下,R Markdown和knitr軟體包可創建數據分析報告。R Mardown提供了簡單語法生成分析報表,包括普通文字、R代碼、以及行內代碼。knitr在此基礎上生成HTML、PDF、word文檔格式的報告,以及幻燈片,並且可在指定位置生成R代碼的執行結果。軟體包knitr和rmarkdown。

library(knitr)

library(rmarkdown)

相關詞條

相關搜尋

熱門詞條

聯絡我們