內容介紹
【編輯推薦】
這本書涵蓋了R語言編程的諸多方面,尤其在面向對象編程、程式調試、提升程式運行速度以及並行計算等方面,填補了同類圖書的空白。關於程式調試的章節更是作者多年經驗的總結。不管是初學者還是有一定編程經驗的讀者,閱讀這本書都會有所收穫。
——統計之都
【內容簡介】
R語言是世界上最流行的用於數據處理和統計分析的腳本語言。考古學家用它來跟蹤古代文明的傳播,醫藥公司用它來探索哪種藥物更安全、更有效,精算師用它評估金融風險以保證市場的平穩運行。總之,在大數據時代,統計數據、分析數據都離不開計算機軟體的支持,在這方面R語言尤其出色。
本書將帶領你踏上R語言軟體開發之旅,從最基本的數據類型和數據結構開始,到閉包、遞歸和匿名函式等高級主題,由淺入深,講解細膩,讀者完全不需要統計學的知識,甚至不需要編程基礎。而書中提到的很多高級編程技巧,都是作者多年編程經驗的總結,對有經驗的開發者也大有裨益。本書精選了44個擴展案例,這些案例都源自於作者親身參與過的諮詢項目,都是與數據分析相關的,生動展示了R語言在統計學中的高效套用。
本書核心內容:
R語言的完整語法以及R語言的編程技巧
創建精美圖形來展示複雜數據和函式
使用並行計算和向量化的方法編寫更高效的代碼
使用R對C/C++和Python的接口來提高計算速度或增加功能
文本分析、圖像處理等領域新的R包
使用高級調試技巧清除代碼里惱人的錯誤
包含許多“擴展案例”,展示完整的、特定用途的函式,並針對同一個問題討論了不同的設計方案,以便分析高效準確的做法。
在恰當的時候介紹R語言與其他語言的差異,給那些了解其他語言的開發人員提供參考。
【相關圖書推薦】
978-7-111-40700-3 數據挖掘與R語言
978-7-111-42021-7 R語言經典實例
978-7-111-41731-6 機器學習:實用案例解析
978-7-111-32572-7 時間序列分析及套用:R語言(原書第2版)
作者介紹
Norman Matloff 著名計算機科學家兼統計學家,美國加州大學戴維斯分校計算機科學系教授,曾是該校統計專業的創建者之一,並擔任過統計學教授。對並行編程、網路流量、數據挖掘、磁碟系統性能等方面的技術都有深入的研究。樂於分享,撰寫了多部廣受歡迎的關於軟體開發的線上教程,多次為《紐約時報》、《華盛頓郵報》、《福布斯雜誌》以及《洛杉磯時報》撰寫文章,同時他還是《The Art of Debugging》的作者之一。
作品目錄
譯者序
前 言
致 謝
第1章 快速入門
1.1 怎樣運行R
1.1.1 互動模式
1.1.2 批處理模式
1.2 第一個R會話
1.3 函式入門
1.3.1 變數的作用域
1.3.2 默認參數
1.4 R語言中一些重要的數據結構
1.4.1 向量,R語言中的戰鬥機
1.4.2 字元串
1.4.3 矩陣
1.4.4 列表
1.4.5 數據框
1.4.6 類
1.5 擴展案例:考試成績的回歸分析
1.6 啟動和關閉R
1.7 獲取幫助
1.7.1 help()函式
1.7.2 example()函式
1.7.3 如果你不太清楚要查找什麼
1.7.4 其他主題的幫助
1.7.5 批處理模式的幫助
1.7.6 網際網路資源
第2章 向量
2.1 標量、向量、數組與矩陣
2.1.1 添加或刪除向量元素
2.1.2 獲取向量長度
2.1.3 作為向量的矩陣和數組
2.2 聲明
2.3 循環補齊
2.4 常用的向量運算
2.4.1 向量運算和邏輯運算
2.4.2 向量索引
2.4.3 用:運算符創建向量
2.4.4 使用seq()創建向量
2.4.5 使用rep()重複向量常數
2.5 使用all()和any()
2.5.1 擴展案例:尋找連續出現1的遊程
2.5.2 擴展案例:預測離散值時間序列
2.6 向量化運算符
2.6.1 向量輸入,向量輸出
2.6.2 向量輸入,矩陣輸出
2.7 NA與NULL值
2.7.1 NA的使用
2.7.2 NULL的使用
2.8 篩選
2.8.1 生成篩選索引
2.8.2 使用subset()函式篩選
2.8.3 選擇函式which()
2.9 向量化的ifelse()函式
2.9.1 擴展案例:度量相關性
2.9.2 擴展案例:對鮑魚數據集重新編碼
2.10 測試向量相等
2.11 向量元素的名稱
2.12 關於c()的更多內容
第3章 矩陣和數組
3.1 創建矩陣
3.2 一般矩陣運算
3.2.1 線性代數運算
3.2.2 矩陣索引
3.2.3 擴展案例:圖像操作
3.2.4 矩陣元素篩選
3.2.5 擴展案例:生成協方差矩陣
3.3 對矩陣的行和列調用函式
3.3.1 使用apply()函式
3.3.2 擴展案例:尋找異常值
3.4 增加或刪除矩陣的行或列
3.4.1 改變矩陣的大小
3.4.2 擴展案例:找到圖中距離最近的一對端點
3.5 向量與矩陣的差異
3.6 避免意外降維
3.7 矩陣的行和列的命名問題
3.8 高維數組
第4章 列表
4.1 創建列表
4.2 列表的常規操作
4.2.1 列表索引
4.2.2 增加或刪除列表元素
4.2.3 獲取列表長度
4.2.4 擴展案例:文本辭彙索引
4.3 訪問列表元素和值
4.4 在列表上使用apply系列函式
4.4.1 lapply()和sapply()的使用
4.4.2 擴展案例:文本辭彙索引(續)
4.4.3 擴展案例:鮑魚數據
4.5 遞歸型列表
第5章 數據框
5.1 創建數據框
5.1.1 訪問數據框
5.1.2 擴展案例:考試成績的回歸分析(續)
5.2 其他矩陣式操作
5.2.1 提取子數據框
5.2.2 缺失值的處理
5.2.3 使用rbind()和cbind()等函式
5.2.4 使用apply()
5.2.5 擴展案例:工資研究
5.3 合併數據框
5.4 套用於數據框的函式
5.4.1 在數據框上套用lapply()和sapply()函式
5.4.2 擴展案例:套用Logistic模型
5.4.3 擴展案例:學習中文方言的輔助工具
第6章 因子和表
6.1 因子與水平
6.2 因子的常用函式
6.2.1 tapply函式
6.2.2 split()函式
6.2.3 by()函式
6.3 表的操作
6.3.1 表中有關矩陣和類似數組的操作
6.3.2 擴展案例: 提取子表
6.3.3 擴展案例:在表中尋找頻數最大的單元格
6.4 其他與因子和表有關的函式
6.4.1 aggregate()函式
6.4.2 cut()函式
第7章 R語言編程結構
7.1 控制語句
7.1.1 循環
7.1.2 對非向量集合的循環
7.1.3 if-else結構
7.2 算術和邏輯運算符及數值
7.3 參數的默認值
7.4 返回值
7.4.1 決定是否顯式調用return ()
7.4.2 返回複雜對象
7.5 函式都是對象
7.6 環境和變數作用域的問題
7.6.1 頂層環境
7.6.2 變數作用域的層次
7.6.3 關於ls()的進一步討論
7.6.4 函式(幾乎)沒有副作用
7.6.5 擴展案例:顯示調用框的函式
7.7 R語言中沒有指針
7.8 向上級層次進行寫操作
7.8.1 利用超賦值運算符對非局部變數進行寫操作
7.8.2 用assign()函式對非局部變數進行寫操作
7.8.3 擴展案例:用R語言實現離散事件仿真
7.8.4 什麼時候使用全局變數
7.8.5 閉包
7.9 遞歸
7.9.1 Quicksort的具體實現
7.9.2 拓展舉例:二叉查找樹
7.10 置換函式
7.10.1 什麼是置換函式
7.10.2 擴展案例:可記錄元素修改次數的向量類
7.11 寫函式代碼的工具
7.11.1 文本編輯器和集成開發環境
7.11.2 edit()函式
7.12 創建自己的二元運算符
7.13 匿名函式
第8章 數學運算與模擬
8.1 數學函式
8.1.1 擴展例子:計算機率
8.1.2 累積和與累積乘積
8.1.3 最小值和最大值
8.1.4 微積分
8.2 統計分布函式
8.3 排序
8.4 向量和矩陣的線性代數運算
8.4.1 擴展示例:向量叉積
8.4.2 擴展示例:確定馬爾科夫鏈的平穩分布
8.5 集合運算
8.6 用R做模擬
8.6.1 內置的隨機變數發生器
8.6.2 重複運行時獲得相同的隨機數流
8.6.3 擴展案例:組合的模擬
第9章 面向對象的編程
9.1 S3類
9.1.1 S3泛型函式
9.1.2 實例:線性模型函式lm()中的OOP
9.1.3 尋找泛型函式的實現方法
9.1.4 編寫S3類
9.1.5 使用繼承
9.1.6 擴展示例:用於存儲上三角矩陣的類
9.1.7 擴展示例:多項式回歸程式
9.2 S4類
9.2.1 編寫S4類
9.2.2 在S4類上實現泛型函式
9.3 S3類和S4類的對比
9.4 對象的管理
9.4.1 用ls()函式列出所有對象
9.4.2 用rm()函式刪除特定對象
9.4.3 用save()函式保存對象集合
9.4.4 查看對象內部結構
9.4.5 exists()函式
第10章 輸入與輸出
10.1 連線鍵盤與顯示器
10.1.1 使用scan()函式
10.1.2 使用readline()函式
10.1.3 輸出到顯示器
10.2 讀寫檔案
10.2.1 從檔案中讀取數據框或矩陣
10.2.2 讀取文本檔案
10.2.3 連線的介紹
10.2.4 擴展案例:讀取PUMS普查數據
10.2.5 通過URL在遠程計算機上訪問檔案
10.2.6 寫檔案
10.2.7 獲取檔案和目錄信息
10.2.8 擴展案例:多個檔案內容的和
10.3 訪問網際網路
10.3.1 TCP/IP概述
10.3.2 R中的socket
10.3.3 擴展案例:實現R的並行計算
第11章 字元串操作
11.1 字元串操作函式概述
11.1.1 grep()
11.1.2 nchar()
11.1.3 paste()
11.1.4 sprintf()
11.1.5 substr()
11.1.6 strsplit()
11.1.7 regexpr()
11.1.8 gregexpr()
11.2 正則表達式
11.2.1 擴展案例:檢測檔案名稱的後綴
11.2.2 擴展案例:生成檔案名稱
11.3 在調試工具edtdbg中使用字元串工具
第12章 繪圖
12.1 創建圖形
12.1.1 基礎圖形系統的核心:plot()函式
12.1.2 添加線條:abline()函式
12.1.3 在保持現有圖形的基礎上新增一個繪圖視窗
12.1.4 擴展案例:在一張圖中繪製兩條密度曲線
12.1.5 擴展案例:進一步考察多項式回歸
12.1.6 添加點:points()函式
12.1.7 添加圖例:legend()函式
12.1.8 添加文字:text()函式
12.1.9 精確定位:locator()函式
12.1.10 保存圖形
12.2 定製圖形
12.2.1 改變字元大小:cex選項
12.2.2 改變坐標軸的範圍:xlim和ylim選項
12.2.3 添加多邊形:polygon()函式
12.2.4 平滑散點:lowess()和loess()函式
12.2.5 繪製具有顯式表達式的函式
12.2.6 擴展案例:放大曲線的一部分
12.3 將圖形保存到檔案
12.3.1 R圖形設備
12.3.2 保存已顯示的圖形
12.3.3 關閉R圖形設備
12.4 創建三維圖形
第13章 調試
13.1 調試的基本原則
13.1.1 調試的本質:確認原則
13.1.2 從小處著手
13.1.3 模組化的、自頂向下的調試風格
13.1.4 反漏洞
13.2 為什麼要使用調試工具
13.3 使用R的調試工具
13.3.1 利用debug()和browser()函式進行逐步調試
13.3.2 使用瀏覽器命令
13.3.3 設定斷點
13.3.4 使用trace()函式進行追蹤
13.3.5 使用traceback()和debugger()函式對崩潰的程式進行檢查
13.3.6 擴展案例:兩個完整的調試會話
13.4 更方便的調試工具
13.5 在調試模擬數據的代碼時請確保一致性
13.6 語法和運行時錯誤
13.7 在R上運行GDB
第14章 性能提升:速度和記憶體
14.1 編寫快速的R代碼
14.2 可怕的for循環
14.2.1 用向量化提升速度
14.2.2 擴展案例:在蒙特卡羅模擬中獲得更快的速度
14.2.3 擴展案例:生成冪次矩陣
14.3 函式式編程和記憶體問題
14.3.1 向量賦值問題
14.3.2 改變時拷貝
14.3.3 擴展案例:避免記憶體拷貝
14.4 利用Rprof()來尋找代碼的瓶頸
14.4.1 利用Rprof()來進行監視
14.4.2 Rprof()的工作原理
14.5 位元組碼編譯
14.6 記憶體無法裝下數據怎么辦
14.6.1 分塊
14.6.2 利用R軟體包來進行記憶體管理
第15章 R與其他語言的接口
15.1 編寫能被R調用的C/C++函式
15.1.1 R與C/C++互動的預備知識
15.1.2 例子:提取方陣的次對角線元素
15.1.3 編譯和運行程式
15.1.4 調試R/C程式
15.1.5 擴展案例:預測離散取值的時間序列
15.2 從Python調用R
15.2.1 安裝RPy
15.2.2 RPy語法
第16章 R語言並行計算
16.1 共同外鏈問題
16.2 snow包簡介
16.2.1 運行snow代碼
16.2.2 分析snow代碼
16.2.3 可以獲得多少倍的加速
16.2.4 擴展案例:K均值聚類
16.3 藉助於C
16.3.1 利用多核機器
16.3.2 擴展案例:利用OpenMP解決共同外鏈問題
16.3.3 運行OpenMP代碼
16.3.4 OpenMP代碼分析
16.3.5 其他OpenMP指令
16.3.6 GPU編程
16.4 普遍的性能考慮
16.4.1 開銷的來源
16.4.2 簡單並行程式,以及那些不簡單的
16.4.3 靜態和動態任務分配
16.4.4 軟體鍊金術:將一般的問題轉化為簡單並行問題
16.5 調試R語言並行計算的代碼
附錄A 安裝R
附錄B 安裝和使用包