文 / 刘思喆
历史
R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明,其词法和语法分别源自Scheme和S语言,一般认为R语言是S语言【注:John Chambers,贝尔实验室,1972】的一种方言。
R是“GNU S”,一个能够自由有效地用于统计计算和绘图的语言和环境,它提供了广泛的统计分析和绘图技术,包括线性和非线性模型、统计检验、时间序列、分类、聚类等方法。我们更倾向于认为R是一个环境,在R环境里实现了很多经典的、现代的统计技术。
1992年,Ross Ihaka(图左)和Robert Gentleman(图右)在奥克兰大学成为同事。后来为了方便教授初等统计课程,二人开发了一种语言;而他们名字的首字母都是R,于是R便成为这门语言的名称。
作为R语言的前身——S语言的代码几乎不需要进行任何修改即可在R语言环境下运行,从这个角度讲两种语言几乎等价。S语言诞生于20世纪70年代由John M. Chambers领导的贝尔实验室统计研究部。它的诞生过程几乎就是现代统计分析方式的演化历程的写照【注:谢益辉,郑冰(2008). R语言的历史背景、发展历程和现状. 1st China R Conference.】。
1993年,S语言的许可证被MathSoft公司买断,S-PLUS成为其公司的主打数据分析产品。由于S-PLUS继承了S语言的优秀血统,所以被世界各国的统计学家广泛使用。但好景不长,1997年R语言正式成为GNU项目,大量优秀统计学家加入到R语言开发的行列。随着R语言的功能逐渐强大,S-PLUS的用户渐渐地转到了同承一脉的R语言。S语言的发明人之一——John M. Chambers最后也成为R语言的核心团队成员。S-PLUS这款优秀的软件也几经易手,最后花落TIBCO公司,当然,这是后话。
John M. Chambers老爷子一直不遗余力地致力于R语言的发展,至今仍然是活跃的R语言开发者。在2009年第一期《R Journal》上,John M. Chambers是这样定义R语言的:
当然,R语言的这些特点很难在一篇短文里细致地体现出来。下面我将简要描述一下R语言的现状和未来。
现状及应用
R语言在国际和国内的发展差异非常大,国际上R语言已然是专业数据分析领域的标准,但在国内依旧任重而道远,这固然有数据学科地位不高的原因,国人版权概念薄弱以及学术领域相对闭塞的原因也不容忽视。R语言之所以能够被广大的数据分析工作者接受,这其中有诸多原因。
优势及特点
从R语言的发展历史上看,R主要是统计学家为解决数据分析领域的问题而开发的语言,因此R具有一些独特的优势。
–可通过相应接口连接数据库,例如Oracle、DB2、MySQL。
– 同Python、Java、C、C++等语言进行互调。
–提供API接口均可以调用,例如Google、Twitter、Weibo。
–其他统计软件大部分均可调用R,例如SAS、SPSS、Statistica等。
–甚至一些比较直接的商业应用,例如Oracle R Enterprise、R add-on for Teradata、Sybase RAP等。
荣誉
R语言拥有这么多优势,很大部分原因在于它同样继承了S语言的优秀血统。S语言在1998年被美国计算机协会(ACM)授予了软件系统奖,这是迄今为止众多统计软件中“唯一”被ACM授奖的统计系统。
当时ACM是这样评价S语言的:
我们也可以查询到历年ACM授予软件系统奖的列表,这些优秀的软件系统与我们的生活息息相关:
1983年,Unix
1986年,TeX
1989年,PostScript
1991年,TCP/IP
1995年,World-Wid-Web
1997年,Tcl/Tk
1998年,S
1999年,The Apache Group
2002年,Java
2009年,《纽约时报》发表了题为 “Data Analysts Captivated by R’s Power”的社评,集中讨论了R语言在数据分析领域的发展,并引发了SAS和R用户广泛而激烈的争论。期间,辉瑞公司(Pfizer)非临床数据部的副总监Max Kuhn提到:
社团及活动
正如前文John M. Chambers所说,R也是一个社区,其线下活动非常活跃。在国际上,欧洲和美国每年会轮值举办一次“useR!”会议,届时来自世界各地的R用户齐聚一堂,讨论R语言的应用与科研方面的成果。
出于对统计计算的特殊考虑,每两年还会举办一次DSC会议(Directions in Statistical Computing),专门讨论R在统计计算方面的应用及理论研究。各大城市也会有相应的RGroup,方便本地的R用户聚会及交流。
在国内,每年会以统计之都【注:Capital of Statistics,是一个致力于传播统计学知识并将其应用于实际领域的网站,成立于2006年,宗旨是中国统计学门户网站、免费统计学服务平台】牵头,在北京和上海举办两次中国R语言会议,至2011年已在中国人民大学、华东师范大学等高校举办了四届R语言会议,历年的演讲主题涉及医药、金融、地理信息、统计图形、数据挖掘、制药、高性能计算、社会学、生物信息学、互联网等多个领域。从2012年起,台北将成为第三个举办中国R语言会议的城市——2012年6月的中华R语言会议台北场已经在筹划当中。
业界的认可
KDnuggets网站每年都会做一些数据分析、数据挖掘方面的专题问卷调查,在2011年8月的数据挖掘领域语言流行度的调查中,R语言位居数据挖掘领域所有语言之首(如下图所示),而紧随其后的SQL、Python、Java则在某一领域具有各自独到的优势。在数据挖掘范畴下,R语言同这些语言相互补足、相得益彰。
根据互联网搜索结果计算的TIOBE编程社区指数(Programming Community Index)【注:TIOBE (2011). http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.】可能更能代表编程语言的流行度。在2011年12月份排名中,R语言依旧是统计领域中最为流行的语言,位列第24(Ratings 0.522%),而时常被放在一起比较的SAS则排名第31(0.417%)。
虽然KDnuggets网站的调查存在样本有偏的嫌疑,但毕竟代表了某一类人群的偏好,并且排名前五位的语言在各自的领域确有代表性。(数据来源 http://www.kdnuggets.com/2011/08/poll-languages-for-data-mining-analytics.html)
挑战和未来
虽然R语言有诸多优势,但它并不是万能的——它毕竟是统计编程类语言。受到其算法架构的通用性以及速度性能方面的影响,因此其初始设计完全基于单线程和纯粹的内存计算。虽然一般情况下无关R的使用,但在当今大数据条件下,这两个设计思路的劣势逐渐变得愈加刺眼。好在R的一些优秀的扩展性包解决了上述问题,例如:
这里需要着重提一下parallel包,该包是R核心团队为了解决大数据计算问题而在标准安装程序下新增的功能包
一些误区
很多人认为R语言是GNU开源项目软件,因此软件的使用是“没有任何保证”的。但在美国,R的计算结果被FDA(Food and Drug Administration) 所承认;并且有报告指出与其他商业软件相比,R的Bug数量非常少【注:UCLA (2006). R relative to statistical packages. Technical report, UCLA.】。
R开发的核心团队对于R的新功能持异常谨慎的态度,比如cairographics从2007年开始酝酿,直到上一个大版本(2011年)才引入到R标准安装程序;byte-compile功能更是经历了从1999-2011年近12年的孵化【注:Ripley,B. (2011). The r development process. Technical report,Department of Statistics,University of Oxford.】。从这个角度讲,R语言的代码质量以及运算结果的可信性是完全可以保证的。
当然,这里所说的是R的标准安装程序包,并不代表所有扩展包的质量。毕竟3400+的扩展包质量良莠不齐,虽然不乏一些优秀的包(如Rcpp、RODBC、VGAM、rattle),但必然存在一些扩展包质量不佳的情况。
应用的思考
R语言并不是人人都能接触到的语言,相对要小众很多,有些人即便接触到没准也搞不清楚R到底有什么用途。对于走上这条路的人,经常会有一些应用困难,比如从个人学习角度而言。
从公司商业应用的角度而言,也存在一些不可回避的问题。
结语
R语言虽然诞生于统计社区,服务于数据,但现在随着数据渗透到各行各业,R语言已经远远超过统计范畴,相信不久的将来会有更多的朋友加入到R语言社区。
作者刘思喆,神州数码思特奇首席数据挖掘专家。9年R语言使用经验,《153分钟学会R》作者。
本文选自《程序员》杂志2012年02期,更多精彩内容敬请关注02期杂志
《程序员》2012年杂志订阅送好礼活动火热进行中