R语言: 用于统计计算的编程语言

R语言是一種自由軟體程式語言與操作環境,主要用于统计分析、绘图以及数据挖掘。R由新西蘭奧克蘭大學的统计学家罗斯·伊哈卡和罗伯特·杰特曼開發,現在由R核心小组負責開發,同时也有其他用户编写了诸多外挂的软件包。R以S语言为基础,其词法作用域语义來自Scheme。R的后台程序大多由C语言、FORTRAN语言和R自己写成。

R
R语言: 发展历程, 内置功能, 套件
编程范型多重編程範式阵列式物件導向函數式反射式指令式过程式
設計者罗斯·伊哈卡罗伯特·杰特曼
實作者R核心開發小組
发行时间1993年8月,​30年前​(1993-08
当前版本
  • 4.3.3 (2024年2月29日;穩定版本)
編輯維基數據鏈接
型態系統动态类型
文件扩展名
  • .r
  • .rdata
  • .rds
  • .rda
網站www.r-project.org 編輯維基數據鏈接
啟發語言
SSchemeLisp
影響語言
Julia

R语言是GNU計劃的一个项目,所以其原始碼可自由下載使用。R也有已編譯的執行檔版本可以下載,可在多种平台下运行,包括UNIX(也包括FreeBSDLinux)、WindowsMacOS。R可以以命令行操作,同時有人開發了幾種圖形用戶界面,其中包括RStudioJupyter

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語言、LaTeXJava及最常用C語言Fortran撰寫。下載的執行檔版本會連同一批核心功能的軟件包,而根據CRAN紀錄有一萬多種不同的軟件包。其中有幾款較為常用,例如用於經濟計量、財經分析、人文科學與社會科學研究以及人工智能

發展

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

R新聞雜誌

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

例子

基本语法

下面的例子展示基本的语言语法和命令行界面使用。在R语言中,一般偏好采用两字符合成箭头的赋值算符<-,但是在某些情况也可以使用=

> x <- 1:6 # 在当前环境中创建数值向量。 > y <- x^2 # 基于在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, nrow=3) # 创建将向量z转变为3x2矩阵对象的新矩阵。 > 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 <- data.frame(t(z_matrix), row.names=c('A','B')) # 创建包含来自转置的z_matrix的数据的新data.frame对象,具有横行名字'A'和'B'。 > names(new_df) <- c('X','Y','Z') # 设置new_df的纵列名字为X、Y和Z。 > 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 <- c('one','two') # 访问并接着变更row.names特性;还可以使用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(1,2,3), c(5,3,4)) [1] 23 18 25  > f(1:3, 4) [1] 19 22 25 

建模和绘图

R语言对数据建模和图形有内建支持。下列例子展示R语言如何轻易的生成并绘制带有残差线性回归模型。

R语言: 发展历程, 内置功能, 套件 
出自绘制“模型” (例子中“plot.lm()”函数)的诊断图。
> x <- 1:6 # 创建x和y值。 > y <- x^2   > 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  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语言: 发展历程, 内置功能, 套件 
"Mandelbrot.gif" – R语言用14行代码创建的图形。
  • 使用社区开发库(叫做R包),这里是caTools包;
  • 处理复数
  • 多维数值数组作为基本数据类型,用于变量CZX
install.packages("caTools")  # 安装外部包。 library(caTools)             # 这个外部包提供write.gif函数。 jet.colors <- colorRampPalette(c("green", "pink", "#007FFF", "cyan", "#7FFF7F",                                  "white", "#FF7F00", "red", "#7F0000")) dx <- 1500                    # 定义宽度。 dy <- 1400                    # 定义高度。 C  <- complex(real = rep(seq(-2.2, 1.0, length.out = dx), each = dy),               imag = rep(seq(-1.2, 1.2, length.out = dy), dx)) C <- matrix(C, dy, dx)       # 重制形状为复数的方块矩阵。 Z <- 0                       # 初始化Z为零。 X <- array(0, c(dy, dx, 20)) # 初始化输出3D数组。 for (k in 1:20) {            # 循环具有20次迭代。   Z <- Z^2 + C               # 中心差分方程。   X[, , k] <- exp(-abs(Z))   # 捕获结果。 } write.gif(X, "Mandelbrot.gif", col = jet.colors, delay = 100) 

参考文献

外部链接

参见

Tags:

R语言 发展历程R语言 内置功能R语言 套件R语言 發展R语言 R新聞雜誌R语言 例子R语言 参考文献R语言 外部链接R语言 参见R语言C语言FortranSchemeS語言奧克蘭大學数据挖掘新西蘭程式語言统计罗伯特·杰特曼罗斯·伊哈卡自由軟體软件包

🔥 Trending searches on Wiki 中文:

Tyson Yoshi新加坡国际劳动节關於未知的我們Danielle (NewJeans)葬送的芙莉蓮角色列表排球少年!!公共電視文化事業基金會ENHYPENAUKUS邁爾斯-布里格斯性格分類法劉松仁摩洛哥臺灣地震列表顧立雄Oh!三光公寓!黃國昌Sweet Home鄭麗君朱智勛无用的谎言朱元璋李嘉格火影忍者BLACKPINK列夫·托洛茨基M Countdown习明泽國家安全會議 (中華民國)手术直播间冴羽獠I-LAND 2:N/α身為魔王的我娶了奴隸精靈為妻,該如何表白我的愛?安妮·海瑟薇艾美莉·賓特佛教為美好的世界獻上祝福!角色列表白日之下周深金字塔游戏世界各国和地区面积列表Moving特斯拉 (公司)孟加拉国新世纪福音战士乔·拜登臺南縣王牌酒保格斗实况白蟻臺北市Energy (組合)HUNTER×HUNTER何鴻燊老狐狸周殷廷低谷医生大麻王淨徐波 (企业家)MINJU琉球海溝馬克斯·維斯塔潘秋元優里羅天宇田小娟李白文化大革命千古玦尘南京大屠殺無間道李多慧 (啦啦隊)陳昊宇Haerin甲型流感病毒萨满教🡆 More