《R包開發》作者Hadley Wickham:資料結構“神童”(圖靈訪談)

劉敏ituring發表於2016-10-31

Hadley Wickham  
RStudio的首席科學家,萊斯大學的助理教授,資深R社群成員,已開發了30多個R包。因在資料處理和視覺化開發工具方面的卓越貢獻,獲得專為統計計算而設立的約翰·錢伯斯獎。

enter image description here

Hadley(哈德利)出生在紐西蘭 · 漢密爾頓的一個從事資料統計的家庭。他的父親布萊恩•韋翰是康奈爾大學動物育種方面的資料統計博士,妹妹獲得了加州大學伯克利分校資料統計的博士學位。

如果資料結構方面存在神童一說的話,Hadley應該算一個。他曾自豪地講述自己的經歷:

"15歲時,我的第一份工作就是開發Microsoft Access資料庫,很有趣。我當時做一些資料庫文件,現在人們仍然在使用我寫的資料庫。”

Hadley第一次接觸R語言是在紐西蘭奧克蘭大學的統計專業課上。他認為R語言是“一門用於理解資料的程式語言。”同SQL和Python一樣,R語言對於資料科學家來說,是最流行的程式語言。

和Hadley一樣,R程式語言也來自紐西蘭。R語言成立於1993年,由奧克蘭大學的統計學家Ross Ihaka和Robert Gentleman一起建立,主要用於資料分析,卻也存在一些怪癖(如索引資料結構的方式、實體記憶體儲存的方式等)。所以,其他開發語言的使用者大都認為R語言很奇怪。使用過Java、VBA和PHP之後,Hadley發現R“與眾不同”。“(許多程式設計師)認為R語言荒謬、笨拙,我不這麼認為,”他說,“我認為R非常有趣。”

到美國的愛荷華州立大學攻讀博士之後,Hadley開始開發R包。用哈德利自己的話說,開發包需要涵蓋“幫助人們解決問題的程式碼,然後必須用文件記錄下這些程式碼,別人才可以理解怎樣使用這些程式碼。”他建立的第一個包,作為類專案的一部分,用於生物資訊學資料的視覺化。雖然這個包從未公開過,這絲毫不影響他喜歡分享的態度。

2005年,他釋出了reshape包,廣受關注,也是R包開發的起點。這個包已經被下載了成千上萬次。reshape的目的是減少聚合和運算元據過程中的“乏味和痛苦”。簡化資料轉化的過程看上去並不是什麼難事兒,但對於資料科學家和統計學家來說,這往往是最耗時的工作。

顯然,Hadley很享受reshape開發包的成功。他認為現有的方法並不完美,所以需要開發出新的包。這並不是吹噓,他有足夠的信心,“我堅信我掌握了正確的開發方法,”他再次強調,“要麼更好,要麼更糟。”

--------------

最新力作《R包開發》,著眼於將讀者從R包的使用者晉升為R包的開發者,展示了R包開發的哲學。書中詳細介紹瞭如何將可重用的R函式、示例資料以及文件一起打包,以便與他人分享程式碼、節省開發時間、組織資料分析,儘可能讓工作自動化。

  • 學習R包最有用的元件,包括使用指南和單元測試
  • 利用devtools自動執行任務
  • 掌握良好編碼風格的技巧,比如如何把函式組織成檔案
  • 使用devtools簡化開發流程
  • 發現提交包到CRAN的最佳途徑

--------

點選檢視英文版

一些追隨者稱讚您,“明明可以靠臉吃飯,為什麼還要死磕技術。”所以,是什麼樣的原因讓你這麼喜歡編碼?

主要有兩個原因。首先,我很享受從讓人生畏的表象下挖掘出背後深層原因的過程。比如,挖掘資料整理和tidyr 背後的想法就很好,我喜歡找出事物背後更深層次的理念。

其次,程式設計可以幫助別人。開發R包就是一個很棒的方式,它能把我的想法轉換成別人可以利用的工具。我很樂意聽到R社群的各種反饋。當我聽說有越來越多的人在使用我的程式碼,並且覺得我的程式碼很有用的時候,我的熱情更高了。

在網上可以找到《R 包開發》的免費版。你不會擔心這會減少紙質版圖書的銷售麼?或者說,你為什麼還要選擇出版這本書,完全沒有經濟動力啊?

我寫書的目的並不是賺錢,而是為了接觸到儘可能多的同行。既釋出電子版又出售紙質版可以很好地達成這個目標。沒有充足的錢花費在紙質書上的年輕人可以從網站上下載電子版,喜歡實體書,又不怎麼活躍於網路的人則可以買到一本紙質書。

我瞭解到《R包開發》的編寫方式是開放的,你能解釋下這次眾包編寫的體驗麼?

寫書的一大挑戰就是,很難保持長久的熱情和動力。寫書是一項大型專案,可能需要花費一年甚至幾年的時間。如果以開放的方式編寫,你就能收到不斷的反饋,也更容易保持長久的動力!

校對對我來說非常痛苦。我真的很感謝R社群成員通過github 糾正了我所有的愚蠢錯誤!他們甚至做出了更大的修復,指出文字里的其他問題。總之,開放的編寫方式讓這本書變得更完善!

R 包開發是否類似於傳統程式語言的 API 設計,需要注重封裝性、魯棒性、可用性等,它還有什麼獨特的指標嗎?

我認為存在一些一般性的原則,使包開發能夠順暢進行。但我發現這些原則大都是直觀的感覺,我知道該怎麼操作,但沒辦法向別人很好地解釋出來。所以我嘗試把tidyverse背後的原則寫了出來,你可以在https://github.com/hadley/tidyverse/blob/master/vignettes/manifesto.Rmd.連結裡找到。這些都是R包開發的重要原則,它們讓API更像R,幫助工具包自然順暢地工作。

R語言是一門專為資料分析而設計的語言,但它本身也有一些古怪的習慣,比如資料結構要索引,必須儲存在實體記憶體。是否可以借鑑C++和Spark的記憶體管理方式?

R並不完美,但它很好地提高了資料分析師的工作效率。同時,R語言非常靈活,它允許特定領域語言像ggplot2和dplyr解決某些子域的資料分析問題。高度靈活的副作用是,這會導致效能減慢。不同領域應該採用不同的語言:R語言用於提高人類的資料分析效率,C++用於提高計算機的運算能力。我個人並不相信某種語言可以在兩方面做的都很好。(換句話說,我贊同奧斯特豪特的二分法,https://en.wikipedia.org/wiki/Ousterhout%27s_dichotomy)

用 R 語言統計與分析資料有其獨到的優勢,但效率稍差。R 包開發是否考慮利用 C 語言介面,開發易用性與效率兼顧的元件?

是的,很多R包已經開始使用Rcpp和C++。隨著越來越多的高階程式設計人員學習R語言,以及越來越多的R語言使用者變成經驗豐富的程式設計人員,我想會出現越來越多的高效率R包。

微軟和IBM都有采用R語言開發專案,還有一些商業公司提供了效能更出色的R包,比如H2o。商業公司的介入對R的發展有哪些作用?

我認為,商業公司的介入對R的持續發展以及R作為一種程式語言的不斷完善都具有偉大的歷史意義。R目前在很多公司的專案中充當關鍵作用,這意味著基於R語言開發的資源會越來越多。特別令人興奮的是,我目前參與了R財團的工作(https://www.r-consortium.org)。作為商業公司回饋R社群的有效方式,R財團把他們的資金用於R開發,幫助更多的R語言使用者。

對於你來說,RStudio是R使用者最好的開發環境。但一些讀者擔心你的書可能過於關注RStudio,建議最好跟RStudio分開。

除了RStudio還有其他的R語言開發工具。就資料統計來說,僅次於RStudio的還有ESS和Emacs。這些工具也很強大,但更適合高階開發者使用。所以我的書選擇使用RStudio,當然我對篇幅也進行了合理地平衡,如果你不使用RStudio,可以忽略不適用的部分。(提出這些問題的讀者)很可能是經驗豐富的R程式設計人員,所以他們可以自己找到替代方案。

您為R語言,特別是R包開發,做出了大量貢獻。怎麼做到如此多產?

我個人認為有以下幾點原因。

寫作。我努力建立了寫作習慣,每天早上嘗試寫60-90分鐘。這是我起床後乾的第一件事。我認為,寫作對我的幫助很大。首先,我經常參考自己寫的東西。因為我並不是天天都用C++,我需要經常參考@Rcpp。寫作也讓我意識到自己在知識和工具方面的差距,填補差距的過程幫助我更有效地解決新問題。

閱讀。我讀了很多內容,瀏覽300多種部落格,關注Twitter和Stack Overflow上每一個包含R標記的內容。不是深度閱讀,大部分內容我只是簡要瀏覽。但廣泛的涉略讓我緊跟技術更新、程式語言變化、和其他人處理資料的新方式。遇到新問題的時候,我也能識別出基本的名稱,然後用Google搜尋出可能解決的方案。如果連名稱都不清楚,就很難進一步研究問題。

組塊。來回切換場景費時費力,所以如果同時開發多個包,我什麼也幹不成。所以,大部分的R包都處於閒置狀態,不斷積累問題和想法。積累到一定的量,我會花幾天來處理包開發。

最後,也不能忽略全職開發R的作用。自我離開Rice,超過90%的工作時間會用來思考R開發問題和用R程式設計。這就產生了一種複合作用,開發更出色的工具(認知方面和計算方面)時,很容易就實現了新工具的建立。我甚至可以幾秒內就建立一個新包,因為我有(在大腦裡儲存)大量可用的技術應對新問題。


——更多訪談


更多精彩,加入圖靈訪談微信!

相關文章