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 由裡克貝克爾、、道格鄧恩、瓊麥克雷、以及朱迪席林於 1976 年前後于貝爾實驗室發明。S 是一種用於資料分析的解釋型語言，無需編譯器即可執行。通常用 S 語言編寫的程式碼都可以不作修改地在 R 環境下執行。Scheme 是 Lisp 語言的一個分支，由傑拉爾德J薩斯曼和小蓋伊L斯蒂爾於 1975 年前後在麻省理工學院發明。 1991 年，紐西蘭奧克蘭大學的統計學家羅斯伊哈卡和羅伯特杰特曼開始對 S 語言的一個新版本進行開發。伊哈卡與杰特曼兩人名字首字母都是 R，R 語言因此得名。同時，R 這個單一字母的名字也表明 R 語言與 S 語言一脈相承。1993 年 8 月，伊哈卡與杰特曼在資料平臺 StatLib 和郵件列表 snews 中釋出了 R 的早期版本。1995 年，在統計學家馬丁梅克勒的建議下，伊哈卡與杰特曼透過 GNU 通用公共許可證把 R 做成了一款免費開源軟體。軟體於 1995 年 6 月進行了首次官方釋出。首個穩定測試版本（10）於 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 月，小組成員包括伊哈卡、杰特曼、錢伯斯以及梅克勒，同時也包括了統計學家、道格拉斯貝茨、、、弗里德里希萊施、、鄧肯坦普爾朗、邁克爾勞倫斯、烏韋利格斯、布萊恩裡普利、塞巴斯蒂安邁耶、保羅默雷爾、馬丁普盧默、迪伊潘薩卡爾、西蒙烏爾巴內克以及計算機科學家托馬斯卡利貝拉。小組過去的成員包括塞思福爾肯、圭多馬薩羅託、鄧肯默多克、馬丁摩根、海納施瓦特以及斯特凡諾雅各斯。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 16 在當前環境中建立數值向量。 y x2 基於在 x 中的值建立向量。 print y 列印向量的內容。 1 1 4 9 16 25 36 z x y 建立是為 x 與 y 的和的新向量。 z 返回 z 的內容至當前環境。 1 2 6 12 20 30 42 z_matrix matrix z nrow3 建立將向量 z 轉變為 3x2 矩陣物件的新矩陣。 z_matrix 1 2 1 2 20 2 6 30 3 12 42 2t z_matrix2 轉置這個矩陣，對每個元素乘以 2，從矩陣中每個元素減去 2，並返回結果至終端。 1 2 3 1 2 10 22 2 38 58 82 new_df dataframe t z_matrix rownamesc AB 建立包含來自轉置的 z_matrix 的資料的新 dataframe 物件，具有橫行名字 A 和 B。 names new_df c XYZ 設定 new_df 的縱列名字為 X、Y 和 Z。 print new_df 列印當前結果。 X Y Z A 2 6 12 B 20 30 42 new_dfZ 輸出 Z 列。 1 12 42 new_dfZnew_df Z new_df 3new_dfZ dataframe 的 Z 列可以使用 Z、Z 或 3 語法來訪問，得到的值是相同的。 1 TRUE attributes new_df 列印關於 new_df 物件的特性資訊。 names 1 X Y Z rownames 1 A B class 1 dataframe attributes new_dfrownames c onetwo 訪問並接著變更 rownames 特性；還可以使用 rownames 來完成。 new_df X Y Z one 2 6 12 two 20 30 42 函式的結構 R 語言的力量之一是易於建立新函式。在函式體內的物件保持區域性於這個函式，而且可以返回任何資料型別。例如： 宣告函式 f 具有引數 x、y。 它返回 x 和 y 的線性組合。 f function x y z 3 x 4 y return z 這裡的 return 函式是可選的。 f 1 2 1 11 f c 123 c 534 1 23 18 25 f 13 4 1 19 22 25 建模和繪圖 R 語言對資料建模和圖形有內建支援。下列例子展示 R 語言如何輕易的生成並繪製帶有殘差的線性迴歸模型。 x 16 建立 x 和 y 值。 y x2 model lm y x 線性迴歸模型 y A B x。 summary model 顯示這個模型的深入總結。 Call lm formula y x Residuals 1 2 3 4 5 6 7 8 9 10 33333 06667 26667 26667 06667 33333 Coefficients Estimate Std Error t value Pr t Intercept 93333 28441 3282 0030453 x 70000 07303 9585 0000662 Signif codes 0 0001 001 005 01 1 Residual standard error 3055 on 4 degrees of freedom Multiple Rsquared 09583 Adjusted Rsquared 09478 Fstatistic 9188 on 1 and 4 DF pvalue 0000662 par mfrow c 2 2 建立 2 乘 2 格局的圖表。 plot model 輸出這個模型的診斷圖。 曼德博集合 透過對方程 z z2 c 的前 20 次迭代計算曼德博集合的簡短 R 程式碼，它針對不同的複數常量 c 而繪圖。這個例子展示了： 使用社群開發庫（叫做 R 包），這裡是 caTools 包； 處理複數； 多維數值陣列作為基本資料型別，用於變數 C、Z 和 X。 installpackages caTools 安裝外部包。 library caTools 這個外部包提供 writegif 函式。 jetcolors colorRampPalette c green pink 007FFF cyan 7FFF7F white FF7F00 red 7F0000 dx 1500 定義寬度。 dy 1400 定義高度。 C complex real rep seq 22 10 lengthout dx each dy imag rep seq 12 12 lengthout dy dx C matrix C dy dx 重製形狀為複數的方塊矩陣。 Z 0 初始化 Z 為零。 X array 0 c dy dx 20 初始化輸出 3D 陣列。 for k in 120 迴圈具有 20 次迭代。 Z Z2 C 中心差分方程。 X k exp abs Z 捕獲結果。 writegif X Mandelbrotgif col jetcolors delay 100 參考文獻 外部連結 R 語言官方主頁 參見 RStudio R 語言的整合開發環境（IDE） SPSS 另一種統計分析軟體 Stata 另一種統計分析軟體 SAS 系統 另一種統計分析軟體 SPLUS 同樣建基於 S 語言的統計分析軟體 Category 程式設計語言 Category 陣列程式語言 Category 統計軟體 Category 統計程式語言 CategoryGNU 計劃軟體 CategoryR 語言 Category 自由圖表軟體 Category1993 年建立的程式語言