R是一門很“古老”的語言预柒,可以追溯到20世紀70年代的貝爾實驗室葱蝗。那時候數(shù)值計算的主要語言是Fortran拟逮,這種語言對計算機很友好剥扣,一般對計算機友好的語言對人都不太友好巩剖,貝爾實驗室的John Chambers和他的同事挺身而出,提出了一個想法钠怯,就是下面這張圖佳魔。
這張圖的意思大概就是在Fortran上面再加一層人機交互語言,而且要非常友好呻疹,就像用手機點外賣一樣方便吃引,這種語言就是S語言。S語言一經(jīng)推出刽锤,就廣受好評镊尺,然后廣受好評至1998年,走到人生巔峰并思,獲得美國計算機協(xié)會ACM“軟件系統(tǒng)獎”庐氮,這是迄今為止“唯一”被ACM授獎的統(tǒng)計系統(tǒng)。組委會評價到:“S語言史無前例的改變了人們分析宋彼、數(shù)據(jù)可視化弄砍、數(shù)據(jù)操作的方法,由于John Chambers的洞察力输涕、品味和努力音婶,S成為了一種聰明的、被廣泛接受的莱坎、經(jīng)久不衰的語言......”衣式,歷史上獲得這一殊榮的的還有: Unix、 TeX檐什、TCP/IP碴卧、 Web、 Apache乃正、 Make..住册,2002年是Java,大家對這些是不是覺著很眼熟瓮具?
S語言之后的命運就沒那么“經(jīng)久不衰”了荧飞,它后來走向了商業(yè)化道路凡人,成為了S-plus,隨著R語言的開源和不斷強大叹阔,S-plus的用戶漸漸地轉(zhuǎn)到了R語言划栓。S語言的發(fā)明人John M. Chambers最后也成為了R語言的核心團隊成員(這個核心小組只有二十幾個人)。S-plus幾經(jīng)轉(zhuǎn)手条获,然后...然后就沒了忠荞。如今R語言大會還會經(jīng)常邀請John Chambers,他依然在R語言社區(qū)延續(xù)著他的思想帅掘,并繼續(xù)作出貢獻委煤,可是當(dāng)我們轉(zhuǎn)過身去,想起S語言的故事修档,不免唏噓不已碧绞。
S語言風(fēng)光無限的時候,它的新西蘭方言版小兄弟R語言也開始嶄露頭角吱窝。1993 年讥邻,新西蘭奧克蘭大學(xué)的統(tǒng)計學(xué)家 Ross Ihaka 和 Robert Gentleman 創(chuàng)造了 R。這解釋了R語言為啥叫R的原因院峡,因為兩位創(chuàng)始人都姓R兴使。新西蘭確實是好地方,除了盛產(chǎn)奇異果照激,還產(chǎn)統(tǒng)計學(xué)家发魄。例如前兩集已經(jīng)提到的 Hadley Wickham,出生在新西蘭漢密爾頓的一個統(tǒng)計學(xué)世家俩垃,他父親 Brian Wickham 在康奈爾大學(xué)獲得動物繁殖專業(yè)的博士励幼,該學(xué)科大量使用統(tǒng)計學(xué);而他姐姐則擁有加州大學(xué)伯克利分校的統(tǒng)計學(xué)博士學(xué)位口柳。
這段家譜摘自統(tǒng)計之都里的一篇文章“Hadley Wickham:一個改變了 R 的人”苹粟。統(tǒng)計之都還有一篇專訪 “COS 訪談第 9 期:Hadley Wickham ”。另外跃闹,圖靈社區(qū)還有另外一篇專訪“《R包開發(fā)》作者Hadley Wickham:數(shù)據(jù)結(jié)構(gòu)“神童”(圖靈訪談) ”嵌削。還有一篇 R語言的前世今生對R語言的介紹更為詳盡。把這幾篇放在一起看辣卒,是一件很有意思的事掷贾,有些內(nèi)容解答了大家對R語言的一些疑惑睛榄。
例如荣茫,圖靈社區(qū)對Wickham的訪談里,稱Wickham有個統(tǒng)計學(xué)家的妹妹场靴,而在統(tǒng)計之都的訪談里啡莉,稱Wickham有個統(tǒng)計學(xué)家的姐姐港准。我在第一集里也是說Wickham有個統(tǒng)計學(xué)家的妹妹,到底是姐姐還是妹妹咧欣,有點搞不清浅缸,不過,這個不是大問題魄咕,更重要的可能是下面這些衩椒。
由于該語言是為數(shù)據(jù)分析量身定制,并且某些地方它與眾不同(例如數(shù)據(jù)結(jié)構(gòu)的索引方式以及數(shù)據(jù)強制存儲于內(nèi)存中)哮兰,因此熟悉其他語言的程序員往往覺得 R 非常奇怪毛萌。
“數(shù)據(jù)強制存儲于內(nèi)存中”,這在當(dāng)時是挺先進的想法喝滞,后來的hadoop是外存(就是硬盤)計算阁将,計算比較慢。R語言從誕生到現(xiàn)在右遭,一直都是內(nèi)存計算做盅。但內(nèi)存相比硬盤比較貴啊,市面上1T的硬盤2500元窘哈,這個價錢大概只能買好一點的32G內(nèi)存吹榴,所以,內(nèi)存會成為計算的瓶頸滚婉。
“數(shù)據(jù)結(jié)構(gòu)的索引方式” 我猜是指腊尚,R的數(shù)據(jù)索引是從1開始的,其他語言是從0開始的满哪。這個我倒是不覺著R奇怪婿斥,反倒覺著其他語言奇怪,小明家有三口人哨鸭,第0人是爸爸民宿,第一人是媽媽,第二人是小明像鸡。這個也是我一直想問程序員的活鹰,為啥要從0開始索引呢?當(dāng)然只估,這個在實際工作中并不算一個大問題志群。
R 作為一門編程語言似乎名聲不太好,但我(Wickham蛔钙,下同)覺得那不是事實锌云。我認為 R 的核心是一門優(yōu)雅的編程語言,只是因為絕大部分的 R 用戶都不是程序員吁脱,所以伴隨著這個優(yōu)雅的核心的桑涎,是大量冗長乏味的代碼彬向。R 其實和 Javascript 很像,有一本書叫做《JavaScript 語言精粹》(JavaScript: The Good Parts)攻冷,它試圖提煉出 Javascript 優(yōu)雅的一面娃胆。
Wickham這點說的很準確。像我這種不是程序員的R用戶等曼,我自己也曾嘗試著用R語言的shiny開發(fā)交互式web應(yīng)用里烦,我寫的代碼肯定是冗長乏味的,特別是UI部分禁谦,前端工程師修改起來非常的痛苦招驴。后來我把UI部分交給前端工程師做,我自己專注后端的開發(fā)枷畏。
“R 其實和 Javascript 很像”别厘,這點可能是說,Javascript也是一種語法不是那么嚴謹?shù)恼Z言拥诡,非常靈活触趴。高度靈活的副作用是,這會導(dǎo)致性能減慢渴肉。由于性能瓶頸的出現(xiàn)冗懦,R語言又向其他語言延伸,例如用 R 調(diào)用 C++ 以獲得更快的速度仇祭,這也是R語言目前為提高性能所采用的最普遍的方法披蕉,不過這增加了R用戶的學(xué)習(xí)成本,畢竟大多數(shù)R用戶并不是程序員出身乌奇。
但 Wickham依然保持樂觀没讲,而且很多商業(yè)公司也開始介入R的發(fā)展:
隨著越來越多的高級編程人員學(xué)習(xí)R語言,以及越來越多的R語言使用者變成經(jīng)驗豐富的編程人員礁苗,我想會出現(xiàn)越來越多的高效率R包爬凑。
......我認為,商業(yè)公司(這里指IBM和微軟)的介入對R的持續(xù)發(fā)展以及R作為一種編程語言的不斷完善都具有偉大的歷史意義试伙。R目前在很多公司的項目中充當(dāng)關(guān)鍵作用嘁信,這意味著基于R語言開發(fā)的資源會越來越多。特別令人興奮的是疏叨,我目前參與了R財團的工作(https://www.r-consortium.org)潘靖。作為商業(yè)公司回饋R社區(qū)的有效方式,R財團把他們的資金用于R開發(fā)蚤蔓,幫助更多的R語言使用者卦溢。
希望大家還是要堅持使用R語言。作為一門接口語言,R語言一直在接口的易用性上保持著最高的標準既绕,這也是廣大R語言開發(fā)者和R語言核心團隊不斷沖突的一個原因。如果僅僅是比較接口的易用性上涮坐,例如比較python和R接口的易用性上凄贩,下面這段統(tǒng)計之都對陳天奇(經(jīng)常參加比賽的同學(xué)應(yīng)該都知道他,他開發(fā)了著名的XGBoost袱讹,同時也是mxnet的核心成員)的訪談中疲扎,可以看到一些細節(jié)。這段對話里捷雕,何通是XGBoost的R包開發(fā)者椒丧。
何:python 和 R 涵蓋了幾乎所有 kaggle 用戶的選擇。
陳:是的救巷,于是我就去學(xué)習(xí)了一下 python 里一個叫做 ctypes 的功能壶熏,它可以直接調(diào)用 C 的代碼,于是我花了兩天時間寫了一個 python 的接口浦译,并在比賽的論壇里發(fā)布了出來棒假。
......
何:寫工具的目的也是希望有別的用戶來用。
陳:對的精盅,我最后也會去用比較易用的接口(笑)帽哑。我本來的想法是我不需要用 python 或者 R,我只需要用 c++ 讀一個配置文件就行了叹俏,結(jié)果后來我也去用 python 了妻枕。
何:我之前也用 XGBoost 的 python 接口,自從寫了 R 包之后就再也沒用過 python 接口了(笑)粘驰。
陳:大家都比較懶嘛屡谐,而且這樣的偷懶挺好的。
這里面有一個細節(jié)蝌数,XGBoost的python接口是在兩天之內(nèi)開發(fā)的康嘉,何通開發(fā)的R接口,肯定就沒那么容易了籽前,R語言核心團隊成員總會挑各種各樣的毛病亭珍。所以,有時候我們經(jīng)常會看到python的接口總是最早發(fā)布出來的枝哄,而R語言的接口總是要遲很久才會看到肄梨,一方面R語言開發(fā)者比較少,另外一方面是挑毛病的人比較多(這并不是壞事挠锥,這段對話里众羡,XGBoost的R接口似乎是要好那么一些的)。
參考:
http://dirk.eddelbuettel.com/papers/chirug_mar2018_extending.pdf
https://en.wikipedia.org/wiki/John_Chambers_(statistician)
https://cosx.org/2015/09/hadley-wickham-the-man-who-revolutionized-r/
https://cosx.org/2013/09/a-conversation-with-hadley-wickham
http://www.ituring.com.cn/article/273090
https://www.cnblogs.com/chenkai/archive/2013/05/16/3082889.html
https://cosx.org/2015/06/interview-of-tianqi