《Rcpp:R與C++的無縫整合》已出版

子華發表於2016-01-12

內容簡介

Rcpp是R應用最為廣泛的語言擴充套件包,它被應用於超過100個CRAN和BioConductor的包中。這本書是關於Rcpp的第一本綜合性導論。Rcpp使得使用者可以在R和C++之間來回傳遞數值、向量、列表或者完整的R物件,在給R分析框架帶來深度的同時,也帶來了C++的威力、速度和效率。

本書適用於希望使用C++ 程式碼對R 進行擴充套件的R 使用者。熟悉R 語言對於閱讀本書自然很有幫助;有很多其他書籍提供了回顧和特定的介紹。C++的知識也很有幫助,儘管我們不嚴格要求。附錄為只熟悉R 語言的讀者提供了一個非常簡短的C++ 簡介。

作者

德克·埃德位元爾(Dirk Eddelbuettel) 成為CRAN的貢獻者已逾十年,他維護了超過20個包,是R和其他量化軟體在Debian/Ubuntu上的維護者,並負責編輯CRAN上的金融與高效能運算的任務檢視。此外他還是R/Finance年會的共同發起人,《統計軟體》期刊的編輯。他擁有法國社會科學高等研究院(巴黎)的Ph.D.學位,現就職於芝加哥任高階量化分析師。

譯者

寇強,印第安納大學在讀博士,Rcpp核心團隊成員。

張曄,中山大學計算數學碩士,畢業於華南統計科學研究中心。

推薦序言

R 語言是一門主要用於資料處理、統計分析和視覺化作圖的解釋型指令碼語言。作為一門程式語言,R (及其“前身” S 語言)在設計之初就面臨一個二選一的難題:語言的設計是應該面向使用者,讓使用者可以快速地建模,還是應該面向機器,以使得程式碼可以高速地在計算機上執行?最終,語言的設計者們選擇了前者,其理念是“人的時間” 比“機器的時間” 更為寶貴。在R 語言誕生後的十幾年間,事實證明這個最初的決定使得R 逐漸發展為一門具有高度靈活性和可擴充套件性的統計程式語言,進而極大地促進了其背後R 語言社群的發展壯大。

然而,語言的簡潔性和靈活性並非恆久不變的法則。隨著統計模型越來越複雜,資料量越來越大,眾多的R 語言開發者和使用者開始發現效率成為了這門語言的一個瓶頸。“人的時間” 固然寶貴,但“人等待機器的時間” 同樣不可忽視。如何在保持語法不變的同時提升程式執行的效率,成為了R 語言開發者們一個十分關注的話題。

事實上,在R 語言誕生的初期,其核心開發團隊就給出了一個解決方案:將計算密集的演算法用C/C++ 實現,然後在R 中呼叫這部分程式碼。R 語言提供了一系列的API (應用程式介面)來實現它與其他語言的互動,但在很長的一段時間裡,積極使用這些介面的R 軟體包開發者並不佔多數,其中可能最重要的一個原因就是這些介面的使用相對繁瑣,且文件資料也不夠豐富,開發者空有屠龍之刀,卻無屠龍之技。

幸運的是,這一局面在Rcpp 橫空出世後被徹底打破。我第一次聽說Rcpp是在2009 年,當時在統計之都論壇的帖子上(http://cos.name/cn/topic/17665/)大家在討論如何用R 呼叫C++ 程式,於是經過一些搜尋後我從R 的軟體倉庫中找到了這個軟體包。當時的Rcpp 核心只有兩個檔案,程式碼總量不到2000 行,但那時它已經可以極大地簡化R 與C++ 之間的互動。現如今,Rcpp 的程式碼量已經接近10 萬行,在R 的官方軟體包倉庫中有超過300 個軟體包直接依賴於Rcpp,而它也成為了被依賴次數最多的R 語言擴充套件包(除去R 自身預設提供的擴充套件包),沒有之一。

總的來說,Rcpp 定義了一系列的類、函式和介面來增強R 與C++ 之間的互動性。使用者只需懂得基本的C++ 知識,就可以寫出豐富的可供R 呼叫的C++ 程式。與R 中傳統的C 語言API 相比,Rcpp 利用了更為現代的C++ 程式設計技術,故而其語法更為簡潔,也更富表現力和可讀性。此外,Rcpp 還特意針對R 軟體包開發提供了一系列便捷的輔助程式,使得開發者

可以快速地部署專案,開發軟體包,省去了許多繁瑣而枯燥的設定。或許,這正是Rcpp 能迅速地獲得R 軟體包開發者青睞的原因。

本書的原作者,Dirk Eddelbuettel,正是Rcpp 從最早到現在開發工作的主導者。從這個角度來說,由作者自己來闡述Rcpp 的設計理念和使用方法是最為恰當不過的了。而更為可貴的是,作者在全書中使用了大量的例項和程式碼來講解Rcpp 的細節,可以預想,讀者無論是在理念上還是在實戰中都能從本書中受益。

本書的兩位譯者為本書中文版的面世付出了大量的時間和心血。需要特別提到的是,兩位譯者同樣也是R 社群活躍的開發者,他們在許多R 軟體包和程式設計專案中都大量使用了Rcpp。也正是因為如此,兩位譯者在執筆過程中融入了自己使用Rcpp 的心得和體會,在語言上將原本可能艱澀的程式設計概念用更加平易近人的方式表達出來,相信讀者在閱讀本書的過程中會體會到譯者的用心。

邱怡軒

2015 年3 月於普渡大學

全書目錄 •第一部分 簡介■第1章 Rcpp簡介 ■第2章 工具與設定

•第二部分 核心資料型別■第3章 資料結構:第一部分 ■第4章 資料結構:第二部分

•第三部分 進階話題■第5章 在擴充套件包中使用Rcpp ■第6章 擴充套件Rcpp ■第7章 Modules ■第8章 Suger

•第四部分 應用■第9章 RInside ■第10章 RcppArmadillo ■第11章 RcppGSL ■第12章 RcppEigen

本文由雪晴資料網轉載,圖書購買連結http://item.jd.com/10110511708.html作者Dirk Eddelbuettel。轉載請註明原文連結http://www.xueqing.cc/cms/article/108

相關文章