R语言是一種自由軟體程式語言與操作環境,主要用于统计分析、绘图以及数据挖掘。R由新西蘭奧克蘭大學的统计学家罗斯·伊哈卡和罗伯特·杰特曼開發,現在由R核心小组負責開發,同时也有其他用户编写了诸多外挂的软件包。R以S语言为基础,其词法作用域语义來自Scheme。R的后台程序大多由C语言、FORTRAN语言和R自己写成。
R语言是GNU計劃的一个项目,所以其原始碼可自由下載使用。R也有已編譯的執行檔版本可以下載,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。R可以以命令行操作,同時有人開發了幾種圖形用戶界面,其中包括RStudio
在TIOBE2022年1月对编程语言人气的排名中,R排名第12。
发展历程
R语言以S语言为基础,增加了Scheme语言中词法作用域这一机制,使程序员得以将代码中某一对象的适用范围限制到一小段代码之中。S是一种用于数据分析的解释型语言,无需编译器即可运行。通常用S语言编写的代码都可以不作修改地在R环境下运行。Scheme是Lisp语言的一个分支,由杰拉尔德·J·萨斯曼和小盖伊·L·斯蒂尔于1975年前后在麻省理工学院发明。
1991年,新西兰奥克兰大学的统计学家罗斯·伊哈卡和罗伯特·杰特曼开始对S语言的一个新版本进行开发。伊哈卡与杰特曼两人名字首字母都是R,R语言因此得名。同时,R这个单一字母的名字也表明R语言与S语言一脉相承。首个稳定测试版本(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月,小组成员包括伊哈卡、杰特曼、钱伯斯以及梅克勒,同时也包括了统计学家、道格拉斯·贝茨、、、弗里德里希·莱施、、邓肯·坦普尔·朗、迈克尔·劳伦斯、乌韦·利格斯、布莱恩·里普利、塞巴斯蒂安·迈耶、保罗·默雷尔、马丁·普卢默、迪伊潘·萨卡尔、西蒙·乌尔巴内克以及计算机科学家托马斯·卡利贝拉。2003年4月,一个名为R基金会的非盈利组织正式成立,为的是更好地对R语言的开发提供支持。R支持各种数组运算,与自由软件GNU Octave和商業軟件MATLAB的功能有所重叠。列表指一组数据类型可能有所不同的对象。一个字串向量与数值向量合在一起就可以成为一个列表。数据框本质上是一个列表,里面包含了一个或多个长度相同的向量。数据框将这些向量合并成表格,每一纵列都有一个单一的名称。
用户可以用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_df[3]==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语言如何轻易的生成并绘制带有残差的线性回归模型。
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而绘图。这个例子展示了:
- 使用社区开发库(叫做R包),这里是caTools包;
- 处理复数;
- 多维数值数组作为基本数据类型,用于变量C、Z和X。
install.packages("caTools") # 安装外部包。
library(caTools) # 这个外部包提供write.gif函数。
jet.colors
参考文献
外部链接
- [http://www.r-project.org/ R語言官方主頁]
参见
- RStudio - R语言的集成开发环境(IDE)
- SPSS - 另一種統計分析軟件
- Stata - 另一種統計分析軟件
- SAS系統 - 另一種統計分析軟件
- S-PLUS - 同樣建基於S語言的統計分析軟件
评论 (0)