R語言

R語言是一種自由軟體程式語言與操作環境，主要用於統計分析、繪圖以及數據挖掘。R由新西蘭奧克蘭大學的統計學家羅斯·伊哈卡和羅伯特·杰特曼開發，現在由R核心小組負責開發，同時也有其他用戶編寫了諸多外掛的軟件包。R以S語言為基礎，其詞法作用域語義來自Scheme。R的後臺程序大多由C語言、FORTRAN語言和R自己寫成。
R語言是GNU計劃的一個項目，所以其原始碼可自由下載使用。R也有已編譯的執行檔版本可以下載，可在多種平臺下運行，包括UNIX（也包括FreeBSD和Linux）、Windows和MacOS。R可以以命令行操作，同時有人開發了幾種圖形用戶界面，其中包括RStudio與Jupyter。
在TIOBE2022年1月對編程語言人氣的排名中，R排名第12。

**發展歷程**
R語言以S語言為基礎，增加了Scheme語言中詞法作用域這一機制，使程序員得以將代碼中某一對象的適用範圍限制到一小段代碼之中。S由裡克·貝克爾、John Chambers (statistician)、道格·鄧恩、瓊·麥克雷、以及朱迪·席林於1976年前後于貝爾實驗室發明。S是一種用於數據分析的解釋型語言，無需編譯器即可運行。通常用S語言編寫的代碼都可以不作修改地在R環境下運行。Scheme是Lisp語言的一個分支，由傑拉爾德·J·薩斯曼和小蓋伊·L·斯蒂爾於1975年前後在麻省理工學院發明。
1991年，新西蘭奧克蘭大學的統計學家羅斯·伊哈卡和羅伯特·杰特曼開始對S語言的一個新版本進行開發。伊哈卡與杰特曼兩人名字首字母都是R，R語言因此得名。同時，R這個單一字母的名字也表明R語言與S語言一脈相承。1993年8月，伊哈卡與杰特曼在數據平臺StatLib和郵件列表s-news中發佈了R的早期版本。1995年，在統計學家馬丁·梅克勒的建議下，伊哈卡與杰特曼通過GNU通用公共許可證把R做成了一款免費開源軟件。軟件於1995年6月進行了首次官方發佈。首個穩定測試版本（1.0）於2000年2月29日發佈。
R綜合檔案網（Comprehensive R Archive Network；CRAN）於1997年4月23日正式上線。CRAN除了收藏了R的執行檔下載版、原始碼和說明文件，也收錄了各種用戶撰寫的R軟件包。CRAN最早有3個鏡像以及12個軟件包。截止2022年1月，CRAN有101個鏡像站以及18728個軟件包。
同樣在1997年，R核心小組正式成立，以進一步對R語言進行開發。截止2022年1月，小組成員包括伊哈卡、杰特曼、錢伯斯以及梅克勒，同時也包括了統計學家Kurt Hornik、道格拉斯·貝茨、Peter Dalgaard、Luke Tierney、弗里德里希·萊施、Thomas Lumley、鄧肯·坦普爾·朗、邁克爾·勞倫斯、烏韋·利格斯、布萊恩·裡普利、塞巴斯蒂安·邁耶、保羅·默雷爾、馬丁·普盧默、迪伊潘·薩卡爾、西蒙·烏爾巴內克以及計算機科學家托馬斯·卡利貝拉。小組過去的成員包括塞思·福爾肯、圭多·馬薩羅託、鄧肯·默多克、馬丁·摩根、海納·施瓦特以及斯特凡諾·雅各斯。2003年4月，一個名為R基金會的非盈利組織正式成立，為的是更好地對R語言的開發提供支持。

**內置功能**
R主要用於數據分析。在R語言中，用於信息存儲的數據結構包括向量、數組、列表以及數據框。向量指一組帶有固定順序, 數據類型唯一的字串或數值，其內容可以填寫到一維或多維的數組之中。二維數組也叫做矩陣。R支持各種數組運算，與自由軟件GNU Octave和商業軟件MATLAB的功能有所重疊。列表指一組數據類型可能有所不同的對象。一個字串向量與數值向量合在一起就可以成為一個列表。數據框本質上是一個列表，裡面包含了一個或多個長度相同的向量。數據框將這些向量合併成表格，每一縱列都有一個單一的名稱。標量這一數據類型在R語言中並不存在，所謂的標量就是一個長度為一的向量。
用戶可以用R來進行一些基本的統計檢驗，構建線性及非線性的模型，對時間序列加以分析，或對數據進行分類與聚類分析。R的另一強項是繪圖功能，畫出的圖表能夠達到專業出版物的要求，也可加入數學符號。計算強度較大時，用戶可在程序中嵌入C、C++以及FORTRAN語言以幫助運算。
因為S的血緣，R比其他統計學或數學專用的編程語言有更強的物件導向（面向對象程序設計, S3, S4等）功能。

**套件**
R的功能能夠透過由用戶撰寫的套件（Packages）增強。增加的功能有特殊的統計技術、繪圖功能，以及編程介面和數據輸出／輸入功能。這些軟件包是由R語言、LaTeX、Java及最常用C語言和Fortran撰寫。下載的執行檔版本會連同一批核心功能的軟件包，而根據CRAN紀錄有一萬多種不同的軟件包。其中有幾款較為常用，例如用於經濟計量、財經分析、人文科學與社會科學研究以及人工智能。

**發展**
生物信息學社群時常使用R進行分子生物學數據分析。Bioconductor計劃就是讓R作為基因圖譜分析工具。 Gnumeric開發者正和R開發者合作，改善Gnumeric計算結果的精確度。

**R新聞雜誌**
《R新聞雜誌》（R Newsletter）每年會出版兩至三次，為一份免費的電子雜誌，內容有關統計學軟件發展及R語言開發資訊。第一期在2001年一月出版。從2008年開始，被R Journal替代。

**例子**

**基本語法**
下面的例子展示基本的語言語法和命令行界面使用。在R語言中，一般偏好採用兩字符合成箭頭的賦值算符，但是在某些情況也可以使用=。
> x  y  print(y) # 打印向量的內容。
1  1  4  9 16 25 36
> z  z # 返回z的內容至當前環境。
1  2  6 12 20 30 42
> z_matrix  z_matrix 
,1 ,2
1,    2   20
2,    6   30
3,   12   42
> 2*t(z_matrix)-2 # 轉置這個矩陣，對每個元素乘以2，從矩陣中每個元素減去2，並返回結果至終端。
,1 ,2 ,3
1,    2   10   22
2,   38   58   82
> new_df  names(new_df)  print(new_df)  # 打印當前結果。
X  Y  Z
A  2  6 12
B 20 30 42
> new_df$Z # 輸出Z列。
1 12 42
> new_df$Z==new_df'Z' && new_df3==new_df$Z # data.frame的Z列可以使用$Z、'Z'或3語法來訪問，得到的值是相同的。 
1 TRUE
> attributes(new_df) # 打印關於new_df對象的特性信息。
$names
1 "X" "Y" "Z"
$row.names
1 "A" "B"
$class
1 "data.frame"
> attributes(new_df)$row.names  new_df
X  Y  Z
one  2  6 12
two 20 30 42

**函數的結構**
R語言的力量之一是易於創建新函數。在函數體內的對象保持局部於這個函數，而且可以返回任何數據類型。例如：
# 聲明函數“f”具有參數“x”、“y“。
# 它返回x和y的線性組合。
f 
> f(1, 2)
1 11
> f(c(1,2,3), c(5,3,4))
1 23 18 25
> f(1:3, 4)
1 19 22 25

**建模和繪圖**
R語言對數據建模和圖形有內建支持。下列例子展示R語言如何輕易的生成並繪製帶有殘差的線性迴歸模型。
出自繪製“模型” （例子中“plot.lm()”函數）的診斷圖。
> x  y  model  summary(model)  # 顯示這個模型的深入總結。
Call:
lm(formula = y ~ x)
Residuals:
1       2       3       4       5       6       7       8      9      10
3.3333 -0.6667 -2.6667 -2.6667 -0.6667  3.3333
Coefficients:
Estimate Std. Error t value Pr(>|t|)   
(Intercept)  -9.3333     2.8441  -3.282 0.030453 x             7.0000     0.7303   9.585 0.000662 **---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.055 on 4 degrees of freedom
Multiple R-squared:  0.9583, Adjusted R-squared:  0.9478
F-statistic: 91.88 on 1 and 4 DF,  p-value: 0.000662
> par(mfrow = c(2, 2))  # 創建2乘2格局的圖表。
> plot(model)  # 輸出這個模型的診斷圖。

**曼德博集合**
通過對方程z = z2 + c的前20次迭代計算曼德博集合的簡短R代碼，它針對不同的複數常量c而繪圖。這個例子展示了：
"Mandelbrot.gif" – R語言用14行代碼創建的圖形。- 使用社區開發庫（叫做R包），這裡是caTools包；- 處理複數；- 多維數值數組作為基本數據類型，用於變量C、Z和X。
install.packages("caTools")  # 安裝外部包。
library(caTools)             # 這個外部包提供write.gif函數。
jet.colors 

**參考文獻**

**外部鏈接**
  R語言官方主頁 date=20110305165926 

**參見**
 RStudio - R語言的集成開發環境（IDE）- SPSS - 另一種統計分析軟件- Stata - 另一種統計分析軟件- SAS系統 - 另一種統計分析軟件- S-PLUS - 同樣建基於S語言的統計分析軟件