1.R語言編程特徵 1.1 R語言資料結構
R語言資料結構其實以資料類型的方式出現,有資料框,數組、向量和矩陣,因子和列表。資料框dataframe是統計專業常用資料集,而因子factor是分類所用的方法,表明了R語言鮮明的經濟統計色彩。向量vector類似一維數組,但是沒有行名和列名,只有標籤names。數組array包括一維數組,二維數組和三維數組和多維陣列,三維數組有行、列和層,有行名rownames和列名colnames。矩陣matrix是二維數組,但是具有矩陣計算的性質。列表list不僅具有c語言結構struct的特徵,而且性質是向量,因此是資料結構中的廣義表。
R語言的資料結構中,沒有樹和圖。樹可用靜態數組實現,應用索引方法。而圖在軟體包igraph中提供的函數實現,R語言的圖稱為網路資料格式,所以能分析生物結構和電腦網路。 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語言百科[4] 。 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語言的掌握有標準[1][2][3][5] 。 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 (int i = 0; i < 1000000; i++) #需要計算執行時間的迴圈時間
{ i++;
}
endTime=clock();
cout << "Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
system("pause");
return 0;
} 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)
未完待續
轉載地址:http://www.baike.com/wiki/R%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B
【詩詞曲賦】
江城子
蘇軾
十年生死兩茫茫。
不思量,自難忘。
千裡孤墳,無處話淒涼。[1]
縱使相逢應不識,
塵滿面,鬢如霜。
夜來幽夢忽還鄉。
小軒窗,正梳妝。
相顧無言,惟有淚千行。
料得年年斷腸處,
明月夜,短松岡。
注釋[1] 蘇軾紀念夫人