作者按:本文根據(jù)去年11月份CSDN舉辦的“大數(shù)據(jù)技術(shù)大會(huì)”演講材料整理,最初發(fā)表于2012年2月期《程序員》雜志。
1. 歷史
R(R Development Core Team, 2011)語言由新西蘭奧克蘭大學(xué)的 Ross Ihaka 和 Robert Gentleman 兩人共同發(fā)明,其詞法和語法分別源自 Scheme 和 S 語言,R 語言一般認(rèn)為是 S 語言(John Chambers, Bell Labs, 1972)的一種方言。R 是“GNU S”, 一個(gè)自由的、有效的、用于統(tǒng)計(jì)計(jì)算和繪圖的語言和環(huán)境,它提供了廣泛的統(tǒng)計(jì)分析和繪圖技術(shù):包括線性和非線性模型、統(tǒng)計(jì)檢驗(yàn)、時(shí)間序列、分類、聚類等方法。我們更傾向于認(rèn)為 R 是一個(gè)環(huán)境,在 R 環(huán)境里實(shí)現(xiàn)了很多經(jīng)典的、現(xiàn)代的統(tǒng)計(jì)技術(shù)。
圖1: 1992 年,Ross Ihaka 和Robert Gentleman 在奧克蘭大學(xué)成為同事。后來為了方便教授初等統(tǒng)計(jì)課程,二人開發(fā)了一種語言;而他們名字的首字母都是R,于是R 便成為了這門語言的名稱。
作為 R 語言的前身——S 語言的代碼幾乎不需要進(jìn)行任何修改即可在R 語言環(huán)境下運(yùn)行,從這個(gè)角度講兩種語言幾乎等價(jià)。S 語言誕生于上個(gè)世紀(jì) 70 年代的由 John M. Chambers 領(lǐng)導(dǎo)的貝爾實(shí)驗(yàn)室統(tǒng)計(jì)部,它的誕生過程幾乎就是現(xiàn)代統(tǒng)計(jì)分析方式的演化歷程的寫照(
謝益輝,鄭冰, 2008):
1975-1976 年,貝爾實(shí)驗(yàn)室統(tǒng)計(jì)研究部使用一套文檔齊全的 Fortran 庫做統(tǒng)計(jì)研究,簡(jiǎn)稱為 SCS ( Statistical Computing Subroutines );
當(dāng)時(shí)的商業(yè)統(tǒng)計(jì)軟件采用的是批處理的方式,一次性輸出問題的所有相關(guān)的信息,在那個(gè)時(shí)代,這個(gè)過程需要幾個(gè)小時(shí),并且商業(yè)軟件不能對(duì)程序做任何修改。而貝爾實(shí)驗(yàn)室的統(tǒng)計(jì)學(xué)家們需要靈活的交互式數(shù)據(jù)分析方式,因此 SCS 在貝爾實(shí)驗(yàn)室非常受歡迎;
但統(tǒng)計(jì)學(xué)家們發(fā)現(xiàn)使用 SCS 做統(tǒng)計(jì)分析時(shí)需要大量的 Fortran 編程,花在編程上的時(shí)間同取得的分析效果相比有些得不償失。慢慢地,大家達(dá)成了一個(gè)共識(shí):統(tǒng)計(jì)分析不應(yīng)該需要編寫 Fortran 程序!
于是,為了同 SCS 進(jìn)行交互,一套完整的高級(jí)語言系統(tǒng) S 誕生了;
S 語言的理念,用它的發(fā)明者John Chambers 的話說就是“to turn ideas into software, quickly and faithfully.”
1993 年,S 語言的許可證被 MathSoft 公司買斷,S-PLUS 成為了其公司的主打數(shù)據(jù)分析產(chǎn)品,這時(shí)候,由于 S-PLUS 繼承了S 語言的優(yōu)秀血統(tǒng),所以廣泛被世界各國的統(tǒng)計(jì)學(xué)家所使用。但好景不長(zhǎng),1997 年 R 語言正式成為了 GNU 項(xiàng)目,大量的優(yōu)秀統(tǒng)計(jì)學(xué)家加入到了 R 語言開發(fā)的行列。隨著 R 語言的功能愈發(fā)強(qiáng)大,漸漸地 S-PLUS 的用戶轉(zhuǎn)到了同承一脈的R 語言。S 語言的發(fā)明人之一,John M. Chambers 最終也成為了 R 語言的核心團(tuán)隊(duì)成員。S-PLUS 這款優(yōu)秀的軟件也幾經(jīng)易手,最后花落 TIBCO 公司,這是后話。
John Chambers 老爺子一直不遺余力的致力于R 語言的發(fā)展,至今仍然是活躍的 R 語言開發(fā)者。在 2009 年第一期 R Journal 上 John Chambers 是這樣對(duì) R 語言是定義的:
An interface to computational procedures of many kinds;
Interactive, hands-on in real time;
Functional in its model of programming;
Object-oriented, “everything is an object”;
Modular, built from standardized pieces; and,
Collaborative, a world-wide, open-source effort.
當(dāng)然,R 語言的這些特點(diǎn)很難在一篇短文里細(xì)致的體現(xiàn)出來,那下面我將簡(jiǎn)要的描述一下 R 語言的現(xiàn)狀和未來。
2. 現(xiàn)狀及應(yīng)用
R 語言在國際和國內(nèi)的發(fā)展差異非常大,國際上 R 語言已然是專業(yè)數(shù)據(jù)分析領(lǐng)域的標(biāo)準(zhǔn),但在國內(nèi)依舊任重而道遠(yuǎn),這固然有數(shù)據(jù)學(xué)科地位的原因,國人版權(quán)概念薄弱以及學(xué)術(shù)領(lǐng)域相對(duì)閉塞也是原因。那為什么 R 語言能夠被廣大的數(shù)據(jù)分析工作者做接受?這其中原因是很多的:
2.1 優(yōu)勢(shì)及特點(diǎn)
從 R 語言的發(fā)展歷史上看,R 主要是統(tǒng)計(jì)學(xué)家為解決數(shù)據(jù)分析領(lǐng)域問題而開發(fā)的語言,因此 R 具有一些獨(dú)特的優(yōu)勢(shì):
統(tǒng)計(jì)學(xué)家和幾乎覆蓋整個(gè)統(tǒng)計(jì)領(lǐng)域的前沿算法(3700+ 擴(kuò)展包)
開放的源代碼(free, in both senses),可以部署在任何操作系統(tǒng),比如 Windows, Linux, Mac OS X, BSD, Unix強(qiáng)大的社區(qū)支持
高質(zhì)量、廣泛的統(tǒng)計(jì)分析、數(shù)據(jù)挖掘平臺(tái)
重復(fù)性的分析工作(Sweave = R + LATEX),借助 R 語言的強(qiáng)大的分析能力 + LaTeX 完美的排版能力,可以自動(dòng)生成分析報(bào)告
方便的擴(kuò)展性可通過相應(yīng)接口連接數(shù)據(jù)庫,如 Oracle、DB2、MySQL
同 Python、Java、C、C++ 等語言進(jìn)行互調(diào)
提供 API 接口均可以調(diào)用,比如 Google、Twitter、Weibo
其他統(tǒng)計(jì)軟件大部分均可調(diào)用 R,比如 SAS、SPSS、Statistica等
甚至一些比較直接的商業(yè)應(yīng)用,比如 Oracle R Enterprise, IBM Netezza, R add-on for Teradata, SAP HANA, Sybase RAP(
劉思喆,2012)
2.2 榮譽(yù)
R 語言擁有這么多優(yōu)勢(shì),很大部分原因是由于它同樣繼承了 S 語言的優(yōu)秀血統(tǒng)。S 語言在1998 年被美國計(jì)算機(jī)協(xié)會(huì)(ACM)授予了軟件系統(tǒng)獎(jiǎng),這是迄今為止眾多統(tǒng)計(jì)軟件中“唯一”被 ACM 授予的統(tǒng)計(jì)系統(tǒng)。
當(dāng)時(shí) ACM 是這樣評(píng)價(jià)S 語言的:
永久的改變了人們分析、可視化、處理數(shù)據(jù)的方式;
是一個(gè)優(yōu)雅的,被廣泛接受的,不朽的軟件系統(tǒng)。
我們也可以查詢到歷年 ACM 授予軟件系統(tǒng)獎(jiǎng)的列表,這些優(yōu)秀的軟件系統(tǒng)同我們的生活息息相關(guān):
1983 Unix
1986 TeX
1989 PostScript
1991 TCP/IP
1995 World-Wide-Web
1997 Tcl/Tk
1998 S
1999 The Apache Group
2002 Java
2009 年紐約時(shí)報(bào)發(fā)表了題為 “Data Analysts Captivated by R’s Power” 的社評(píng),集中的討論了 R 語言在數(shù)據(jù)分析領(lǐng)域的發(fā)展,并引發(fā)了 SAS 和 R 用戶廣泛而激烈的爭(zhēng)論。接下來的 2010 年,美國統(tǒng)計(jì)協(xié)會(huì)(American Statistical Association)又將第一屆“統(tǒng)計(jì)計(jì)算及圖形獎(jiǎng)” 授予了 R 語言,用于表彰其在統(tǒng)計(jì)應(yīng)用和統(tǒng)計(jì)研究廣泛的影響。
2.3 社團(tuán)及活動(dòng)
正如前文 John Chambers 所說,R 也是一個(gè)社區(qū),其線下的活動(dòng)也是非?;钴S。在國際上,歐洲和美國每年會(huì)輪值舉辦一次 useR! 會(huì)議,屆時(shí)來自于世界各地的 R 用戶齊聚一堂,討論 R 語言的應(yīng)用與科研方面的成果。出于對(duì)統(tǒng)計(jì)計(jì)算的特殊考慮,每?jī)赡赀€會(huì)舉辦一次 DSC 會(huì)議(Directions in Statistical Computing),專門討論 R 在統(tǒng)計(jì)計(jì)算方面的應(yīng)用及理論研究。各大城市也會(huì)有相應(yīng)的 R Group,方便本地的R 用戶聚會(huì)及交流。
在國內(nèi),每年會(huì)以統(tǒng)計(jì)之都牽頭在北京和上海舉辦兩次中國 R 語言會(huì)議,至今年已經(jīng)在中國人民大學(xué)、華東師范大學(xué)等高校舉辦了四屆 R 語言會(huì)議,歷年的演講主題涉及醫(yī)藥、金融、地理信息、統(tǒng)計(jì)圖形、數(shù)據(jù)挖掘、制藥、高性能計(jì)算、社會(huì)學(xué)、生物信息學(xué)、互聯(lián)網(wǎng)等多個(gè)領(lǐng)域,從明年起,臺(tái)北將成為第三個(gè)舉辦中國 R 語言會(huì)議的城市,2012 年6月的中華 R 語言會(huì)議臺(tái)北場(chǎng)已經(jīng)在籌劃當(dāng)中。
2.4 業(yè)界的認(rèn)可
KDnuggets 網(wǎng)站每年都會(huì)做一些數(shù)據(jù)分析、數(shù)據(jù)挖掘方面的專題問卷調(diào)查,在 2011 年 8月份的數(shù)據(jù)挖掘領(lǐng)域語言流行度的調(diào)查中,R 語言位于數(shù)據(jù)挖掘領(lǐng)域居于所有語言之首(圖2),而緊隨其后的SQL、Python、Java 則是在某一領(lǐng)域具有各自的獨(dú)到優(yōu)勢(shì)。在數(shù)據(jù)挖掘范疇下,R 語言同這些語言相互補(bǔ)足、相得益彰。
根據(jù)互聯(lián)網(wǎng)搜索結(jié)果計(jì)算的TIOBE 編程社區(qū)指數(shù)(Programming Community Index)(TIOBE, 2011)可能更能代表編程語言的流行度。在 2011 年 12 月份排名中,R 語言依舊是在統(tǒng)計(jì)領(lǐng)域中最為流行的語言,位列第 24(Ratings 0.522%),而時(shí)常被放在一起比較的SAS 則排名第 31(0.417%)。
圖2: 雖然KDnuggets 網(wǎng)站的調(diào)查存在樣本有偏的嫌疑,但畢竟代表了某一類人群的偏好。并 且排名前五位的語言在各自的領(lǐng)域確有代表性。數(shù)據(jù)來源http://www.kdnuggets.com/2011/08/poll-languages-for-data-mining-analytics.html
3. 挑戰(zhàn)和未來
雖然 R 語言有諸多的優(yōu)勢(shì),但 R 語言不是萬能的,它畢竟是統(tǒng)計(jì)編程類語言。受到其算法架構(gòu)的通用性以及速度性能方面的影響,因此其初始設(shè)計(jì)完全基于單線程和純粹的內(nèi)存計(jì)算。雖然一般情況下無關(guān) R 的使用,在當(dāng)今大數(shù)據(jù)條件下,這兩個(gè)設(shè)計(jì)思路的劣勢(shì)逐漸變得愈加刺眼,好在 R 的一些優(yōu)秀的擴(kuò)展性包解決了上述問題,比如:
snow 支持MPI、PVM、nws、sockets 通訊,解決單線程和內(nèi)存限制;
multicore 適合大規(guī)模計(jì)算環(huán)境,主要解決單線程問題;
parallel R 2.14.0 版本增加的標(biāo)準(zhǔn)包,整合了snow 和multicore 功能;
R + Hadoop 在Hadoop 集群上運(yùn)行R 代碼,亦或操作Hive 倉庫;
RHIPE 更友好的R 代碼運(yùn)行環(huán)境,解決單線程和內(nèi)存限制;
Segue 利用Amazon’s Web Services(EC2)。
這里需要著重提一下 parallel 包,這個(gè)包是 R 核心團(tuán)隊(duì)為了解決大數(shù)據(jù)計(jì)算問題而在標(biāo)準(zhǔn)安裝程序下新增的功能包。
3.1 一些誤區(qū)
很多人認(rèn)為 R 語言是 GNU 開源項(xiàng)目軟件,因此軟件的使用是“沒有任何保證” 的。但在美國,R 的計(jì)算結(jié)果被 FDA(Food and Drug Administration)所承認(rèn);并且有報(bào)告指出R 相比其他商業(yè)軟件,bug 數(shù)量非常少(UCLA, 2006)!
R 開發(fā)的核心團(tuán)隊(duì)對(duì)于 R 的新功能持異常謹(jǐn)慎的態(tài)度,比如cairographics 從2007 開始醞釀,直到上一個(gè)大版本(2011 年)才引入到 R 標(biāo)準(zhǔn)安裝程序;byte-compile 功能更是經(jīng)歷了1999-2011 近12年的孵化(Ripley, 2011)。從這個(gè)角度講,R 語言的代碼質(zhì)量以及運(yùn)算結(jié)果的可信性是完全可以保證的。
當(dāng)然,這里所說的是 R 的標(biāo)準(zhǔn)安裝程序包,并不代表所有的擴(kuò)展包的質(zhì)量。畢竟3700+的擴(kuò)展包良莠不齊,雖然不乏一些優(yōu)秀的包(如Rcpp, RODBC, VGAM, rattle),但必然存在一些擴(kuò)展包質(zhì)量不佳的情況。
3.2 應(yīng)用的思考
R 語言并不是人人都會(huì)接觸到的語言,相對(duì)要小眾很多,有些人即便接觸到?jīng)]準(zhǔn)也搞不清楚 R 到底是做什么用途。對(duì)于走上這條路的人,經(jīng)常會(huì)有一些應(yīng)用困難,比如對(duì)個(gè)人學(xué)習(xí)角度而言:
雖然 R 語言的設(shè)計(jì)之初就是避免通過大量編程實(shí)現(xiàn)統(tǒng)計(jì)算法,但最基本的編程能力還是需要的,因此對(duì)于一般非計(jì)算機(jī)專業(yè)的工作者來說無疑提高了難度;
還有很多人提到,R 語言的學(xué)習(xí)曲線非常陡峭。但從個(gè)人這么多年的使用經(jīng)驗(yàn)上看,陡峭的學(xué)習(xí)曲線并不是R 語言本身的,而是隱藏在后面的統(tǒng)計(jì)知識(shí)很難在短時(shí)間內(nèi)掌握的緣故。
從公司商業(yè)應(yīng)用的角度而言,也存在一些不可回避的問題:
首先是人力資源成本如何核算;
軟件成本問題,由于 R 是自由軟件,可以隨時(shí)隨地下載,因此對(duì)于企業(yè)來說如何度量成本是一個(gè)問題;
R 的技能核定并沒有官方或機(jī)構(gòu)標(biāo)準(zhǔn),簡(jiǎn)歷上“熟練使用R 語言” 可能沒有任何意義;
實(shí)際上,即便沒有上述兩個(gè)問題,那企業(yè)想找到 R 相關(guān)的人才不那么簡(jiǎn)單;
對(duì)于大量工作已經(jīng)由其他軟件實(shí)現(xiàn)(比如用SAS)的公司來講,轉(zhuǎn)化成本很高;
技術(shù)支持獲取的問題。
4. 結(jié)語
R 語言雖然誕生于統(tǒng)計(jì)社區(qū),服務(wù)于數(shù)據(jù),但現(xiàn)在隨著數(shù)據(jù)滲透到各行各業(yè),R 語言已經(jīng)遠(yuǎn)遠(yuǎn)超過統(tǒng)計(jì)范疇,相信不久的將來會(huì)有更多的朋友加入到 R 語言社區(qū)。
參考目錄
謝益輝,鄭冰(2008).
R 語言的歷史背景、發(fā)展歷程和現(xiàn)狀. 1st China R Conference.
劉思喆(2012). 商業(yè)數(shù)據(jù)庫對(duì) r 語言的支持.
http://www.bjt.name/2012/04/r-language-enterprise/.
R Development Core Team (2011). R: A Language and Environment for Statistical Computing.R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0.
Ripley, B. (2011). The r development process. Technical report, Department of Statistics,
University of Oxford.
TIOBE (2011).
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.
UCLA (2006). R relative to statistical packages. Technical report, UCLA.
8您可能也喜歡:
第六屆中國R語言會(huì)議(上海)紀(jì)要 第一屆中國R語言會(huì)議紀(jì)要 大數(shù)據(jù)時(shí)代和數(shù)據(jù)分析需求,統(tǒng)計(jì)還沾邊嗎? 也談提高R語言的運(yùn)算效率 Sweave:打造一個(gè)可重復(fù)的統(tǒng)計(jì)研究流程無覓關(guān)聯(lián)推薦[?]