“R的極客理想”系列圖書以作者多年開發經驗為素材,系統地梳理了R語言的知識。在《R的極客理想 高級開發篇》中介紹了R語言的30多個工具包的使用方法,并以IT人的視角,告訴讀者如何高效地使用第三方R包。
《R的極客理想 高級開發篇》則以R語言的高級編程為主,輔以跨界知識的綜合運用。書中首先闡釋如何用R語言實現數學、統計計算以及模型建立,應用包括協同過濾算法、基于矩陣的PageRank算法、遺傳算法和金融交易策略模型等。詳細介紹了R語言的環境空間、文件系統管理、S3、S4、RC和R6四種面向對象的程序設計。還介紹完整的R包開發流程,并提供每日中國天氣的應用案例和游戲開發的案例,幫助讀者創建自己的R包,打開R語言產品化的思路。
書中介紹了多個場景案例,不僅從學術的角度完成了模型設計,而且用計算機的方法把產品實現。通過案例的學習,可以讓不同學科背景的R語言使用者,站在其他人的角度,找到新的思維方法。
《R的極客理想 高級開發篇》將介紹R語言在金融領域的應用,真正地讓技術人員把自己的知識變成價值。
資深R語言用戶多年實戰經驗的結晶,介紹R語言本身的核心技術以及R語言在不同領域的跨學科綜合應用,借助每日中國天氣的應用案例和游戲開發的案例,揭秘完整的R包開發流程,幫助讀者創建自己的R包,打開R語言產品化的思路。
為什么要寫這本書
本書是我寫的“R的極客理想”系列叢書的第二本,主要介紹了R語言本身的核心技術、R語言的高級開發應用、R語言與其他學科及知識領域的跨學科綜合應用。
其實,早在我的第一本書《R的極客理想——工具篇》中,就已經介紹了R語言的30多個工具包的使用方法,并以IT人的角度,告訴讀者如何高效地使用第三方R包,把原有IT知識運用到R語言的學習過程中。但由于一本書的篇幅有限,《R的極客理想——工具篇》只講了如何使用R語言,沒有講原理。
而本書將彌補這一遺憾,主要介紹R語言本身的核心技術:包括環境空間、面向對象、文件 為什么要寫這本書
本書是我寫的“R的極客理想”系列叢書的第二本,主要介紹了R語言本身的核心技術、R語言的高級開發應用、R語言與其他學科及知識領域的跨學科綜合應用。
其實,早在我的第一本書《R的極客理想——工具篇》中,就已經介紹了R語言的30多個工具包的使用方法,并以IT人的角度,告訴讀者如何高效地使用第三方R包,把原有IT知識運用到R語言的學習過程中。但由于一本書的篇幅有限,《R的極客理想——工具篇》只講了如何使用R語言,沒有講原理。
而本書將彌補這一遺憾,主要介紹R語言本身的核心技術:包括環境空間、面向對象、文件管理、數學計算、R包開發等主題。我希望通過這本書,可以讓讀者更深入地了解R語言、掌握R語言的核心技術、理解R語言的第三方包的特性,甚至可以自己動手開發出屬于自己風格的優秀R包。說不定,不久的將來我會因用到你開發出來的R包而省力不少。
除此之外,本書的另一大亮點就是:R語言與其他學科知識在不同領域的跨學科綜合應用。在書中,我將毫無保留地向讀者展示:我是怎樣將R語言與其他知識相結合,在不同領域讓R大放異彩的。相信這部分內容會讓很多讀者眼前一亮,為之驚嘆,原來R還可以這么玩兒!也希望這部分內容可以讓大家有所啟發,讓各行業、各知識領域的朋友都可以接觸R,運用R。時至今日,R語言已經不再是局限于科學家們使用的實驗室語言,它已經具備了實際開發應用的能力,并且在挖掘數據價值、發現數據規律、創造數據財富等方面極具智慧和創造性!
張丹,R語言資深用戶,系統架構師,況客科技聯合創始人(Qutke.com)。有10年IT程序開發和系統架構設計的經驗,精通Java、R和Javascript三種編程語言,熟悉數據挖掘、統計和金融的多種算法。目前在互聯網金融量化投資方向創業中,個人博客Alexa全球排名前10萬。
前言
第一部分 R的計算和算法應用
第1章 R語言知識體系和數學函數 2
1.1 R語言知識體系概覽 2
1.1.1 R語言的知識體系結構 3
1.1.2 R語言學習 9
1.2 R語言中的數學計算 11
1.2.1 基本計算 12
1.2.2 三角函數計算 17
1.2.3 復數計算 22
1.2.4 方程計算 23
1.3 概率基礎和R語言 28
1.3.1 隨機變量介紹 28
1.3.2 隨機變量的數字特征 29
1.3.3 極限定理 33
1.4 常用連續型分布介紹及R語言實現 35
1.4.1 均勻分布 35
1.4.2 正態分布 37
1.4.3 指數分布 39
1.4.4 伽瑪分布 41
1.4.5 韋布爾分布 43
1.4.6 卡方分布 44
1.4.7 F分布 46
1.4.8 t分布 48
1.4.9 貝塔分布 50
1.5 R語言的導數計算 51
1.5.1 導數計算 52
1.5.2 初等函數的導數公式 54
1.5.3 二階導數計算 57
1.5.4 偏導數計算 58
第2章 R語言的算法實現 61
2.1 用R重寫Mahout協同過濾算法 61
2.1.1 Mahout的推薦算法模型 62
2.1.2 R語言模型實現 64
2.1.3 算法實現的原理——矩陣變換 67
2.1.4 算法總結 69
2.2 PageRank算法R語言實現 69
2.2.1 PageRank算法介紹 70
2.2.2 PageRank算法原理 70
2.2.3 R語言單機算法實現 72
2.2.4 R語言分步式算法實現 75
2.3 二條均線打天下 78
2.3.1 移動平均線 79
2.3.2 均線模型 79
2.3.3 用R語言實現均線模型 80
2.4 R語言中的遺傳算法 94
2.4.1 遺傳算法介紹 94
2.4.2 遺傳算法原理 96
2.4.3 R語言中的遺傳算法 97
第二部分 深入R語言程序開發
第3章 R內核編程 106
3.1 撬動R內核的高級工具包pryr 106
3.1.1 pryr介紹 107
3.1.2 pryr安裝 107
3.1.3 pryr使用 108
3.2 揭開R語言中環境空間的神秘面紗 120
3.2.1 R語言的環境空間 121
3.2.2 環境空間的特征 124
3.2.3 環境空間的訪問 126
3.3 解密R語言函數的環境空間 129
3.3.1 R語言的函數環境空間 129
3.3.2 封閉環境 130
3.3.3 綁定環境 130
3.3.4 運行環境 131
3.3.5 調用環境 132
3.3.6 完整的環境操作 133
3.4 用R進行文件系統管理 134
3.4.1 文件系統介紹 135
3.4.2 目錄操作 135
3.4.3 文件操作 139
3.4.4 幾個特殊的目錄 142
3.5 R語言3.1.x版本新特性 143
3.5.1 R語言 3.1.x版本介紹 144
3.5.2 R語言3.1.0新特性及代碼描述 145
3.5.3 R語言3.1.1新特性及代碼描述 157
第4章 面向對象編程 162
4.1 R語言面向對象編程 162
4.1.1 什么是面向對象 163
4.1.2 R為什么要進行面向對象編程 164
4.1.3 R的面向對象編程 164
4.2 R語言基于S3的面向對象編程 169
4.2.1 創建S3對象 170
4.2.2 泛型函數和方法調用 171
4.2.3 查看S3對象的函數 172
4.2.4 S3對象的繼承調用方式 174
4.2.5 S3對象的缺點 174
4.2.6 S3對象的使用 175
4.3 R語言基于S4的面向對象編程 176
4.3.1 創建S4對象 176
4.3.2 訪問S4對象的屬性 179
4.3.3 S4的泛型函數 180
4.3.4 查看S4對象的函數 180
4.3.5 S4對象的使用 181
4.4 R語言基于RC的面向對象編程 188
4.4.1 RC對象系統介紹 189
4.4.2 創建RC類和對象 189
4.4.3 對象賦值 192
4.4.4 定義對象的方法 193
4.4.5 RC對象內置方法和內置屬性 194
4.4.6 RC類的輔助函數 199
4.4.7 RC對象系統的使用 201
4.5 R語言基于R6的面向對象編程 206
4.5.1 初識R6 207
4.5.2 創建R6類和實例化對象 207
4.5.3 R6類的主動綁定 211
4.5.4 R6類的繼承關系 212
4.5.5 R6類對象的靜態屬性 214
4.5.6 R6類的可移植類型 215
4.5.7 R6類的動態綁定 216
4.5.8 R6類的打印函數 217
4.5.9 實例化對象的存儲 218
4.5.10 R6面向對象系統的案例 220
第三部分 開發自己的R包
第5章 R包開發 224
5.1 從頭開發自己的R包 224
5.1.1 用Linux命令行開發R包 225
5.1.2 RStudio中開發R包 231
5.2 標準化R包開發流程 235
5.2.1 開發流程介紹 235
5.2.2 編寫功能代碼 236
5.2.3 調試程序 237
5.2.4 單元測試 238
5.2.5 撰寫文檔 239
5.2.6 程序打包 241
5.2.7 程序發布 242
5.3 R語言天氣可視化應用 244
5.3.1 項目介紹 245
5.3.2 系統架構設計 246
5.3.3 R語言程序實現 247
5.4 R包開發——每日中國天氣 260
5.4.1 構建項目 260
5.4.2 靜態數據 261
5.4.3 編寫功能代碼 265
5.4.4 項目配置文件 271
5.4.5 調試程序 272
5.4.6 程序打包 273
第6章 R語言游戲之旅 277
6.1 R語言鍵盤和鼠標事件 277
6.1.1 R語言圖形事件 278
6.1.2 圖形事件API 278
6.1.3 鍵盤事件 279
6.1.4 鼠標事件 280
6.2 貪食蛇游戲入門 282
6.2.1 貪食蛇游戲介紹 282
6.2.2 場景設計 283
6.2.3 程序設計 284
6.2.4 R語言實現 287
6.3 R語言游戲框架設計 294
6.3.1 貪食蛇的面向對象改造 295
6.3.2 游戲框架定義 297
6.3.3 在框架中重新實現貪食蛇游戲 297
6.4 R語言制作游戲2048 303
6.4.1 2048游戲介紹 304
6.4.2 場景設計 304
6.4.3 程序設計 305
6.4.4 R語言實現 307
6.5 發布gridgame游戲包 316
6.5.1 知識儲備 316
6.5.2 gridgame包開發 318
6.5.3 gridgame包發布 326