高級R語言編程指南 高级R语言编程指南

哈德利·威克漢姆 (Hadley Wickham)

買這商品的人也買了...

商品描述

<內容簡介>

本書從R語言的基礎知識入手,深入介紹了R函數式編程、R語言的面向對象特性、程序的調試、代碼優化和性能調優。同時,本書也介紹了R語言如何與HTML和LaTex語言結合的技術,介紹了高性能計算以及C語言編程接口。

<目錄>

推薦序
譯者序
第1章簡介1
1.1本書的目標讀者2
1.2通過本書你可以學到什麼2
1.3元技術3
1.4推薦閱讀3
1.5獲取幫助4
1.6致謝4
1.7約定5
1.8聲明5
第一部分基礎知識
第2章數據結構8
2.1向量9
2.1.1原子向量9
2.1.2列表11
2.1.3練習12
2.2屬性12
2.2.1因子13
2.2.2練習15
2.3矩陣和數組15
2.4數據框17
2.4 .1數據框構建17
2.4.2類型判斷與強制轉換18
2.4.3合併數據框18
2.4.4特殊列19
2.4.5練習19
2.5答案19
第3章子集選取21
3.1數據類型22
3.1.1原子向量22
3.1.2列表23
3.1.3矩陣和數組23
3.1.4數據框24
3.1.5S3對象25
3.1.6S4對象25
3.1.7練習25
3.2子集選取運算符26
3.2.1簡化與保留26
3.2 .2$27
3.2.3缺失/超出索引邊界(越界引用)28
3.2.4練習28
3.3子集選取與賦值29
3.4應用30
3.4.1查詢表(字符子集選取)30
3.4.2人工比對與合併(整數子集選取)30
3.4.3隨機樣本/自助法(整數子集選取)31
3.4.4排序(整數子集選取)31
3.4.5展開重複記錄(整數子集選取)32
3.4.6剔除數據框中某些列(字符子集選取)33
3.4.7根據條件選取行(邏輯子集選取)33
3.4.8布爾代數與集合(邏輯和整數子集選取)34
3.4.9練習35
3.5答案35
第4章常用函數與數據結構36
4.1基礎函數36
4.2常見數據結構37
4.3統計函數38
4.4使用R39
4.5I/O函數39
第5章R編程風格指南40
5.1符號和名字40
5.1.1文件名40
5.1.2對象名40
5.2語法41
5.2.1空格41
5.2.2大括號42
5.2.3行的長度42
5.2.4縮進42
5.2.5賦值43
5.3結構43
第6章函數44
6.1函數組成部分45
6.1.1原函數45
6.1.2練習46
6.2詞法作用域46
6.2.1名字屏蔽47
6.2.2函數與變量48
6.2.3重新開始48
6.2.4動態查找49
6.2.5練習50
6.3每個運算都是一次函數調用50
6.4函數參數51
6.4.1函數調用52
6.4.2使用參數列表來調用函數53
6.4.3默認參數和缺失參數53
6.4.4惰性求值54
6.4.5.. .參數56
6.4.6練習57
6.5特殊調用57
6.5.1中綴函數57
6.5.2替換函數58
6.5.3練習59
6.6返回值59
6.6.1退出時61
6.6.2練習62
6.7答案62
第7章面向對象編程指南64
7.1基礎類型65
7.2S366
7.2.1認識對象、泛型函數和方法66
7.2.2定義類和創建對象67
7.2.3創建新方法和泛型函數69
7.2.4方法分派69
7.2.5練習71
7.3S471
7.3.1識別對象、泛型函數和方法72
7.3.2定義類並創建對象73
7.3.3創建新方法和泛型函數74
7.3.4方法分派74
7.3.5練習75
7.4RC75
7.4.1定義類和創建對象75
7.4.2識別類和方法77
7.4.3方法分派77
7.4.4練習77
7.5選擇一個系統77
7.6答案78
第8章環境79
8.1環境基礎79
8.2環境遞歸83
8.3函數環境85
8.3.1封閉環境85
8.3.2綁定環境86
8.3.3執行環境87
8.3.4調用環境88
8.3.5練習90
8.4綁定名字和數值90
8.5顯式環境92
8.5.1避免複製93
8.5.2軟件包狀態93
8.5.3模擬hashmap93
8.6答案94
第9章調試、條件處理和防禦性編程95
9.1調試技巧96
9.2調試工具97
9.2.1確定調用順序98
9.2.2查看錯誤99
9.2.3查看任意代碼100
9.2.4調用棧:traceback()、where和recover()100
9.2.5其他類型的故障101
9.3條件處理102
9.3.1使用try來忽略錯誤102
9.3.2使用tryCatch ()處理條件103
9.3.3withCallingHandlers()105
9.3.4自定義信號類106
9.3.5練習107
9.4防禦性編程107
9.5答案109
第二部分函數式編程
第10章函數式編程112
10.1動機112
10.2匿名函數116
10.3閉包117
10.3.1函數工廠119
10.3.2可變狀態119
10.3.3練習120
10.4函數列表120
10.4.1將函數列表移到全局環境中122
10.4.2練習123
10.5案例研究:數值積分124
第11章泛函127
11.1第一個泛函:lapply()128
11.1.1循環模式129
11.1.2練習130
11.2for循環泛函:lapply()的相似函數131
11.2.1向量輸出:sapply和vapply131
11.2.2多重輸入:Map(和mapply)133
11.2.3滾動計算134
11.2.4並行化135
11.2.5練習136
11.3操作矩陣和數據框137
11.3.1矩陣和數組運算137
11.3.2組應用138
11.3.3plyr添加包139
11.3.4練習140
11.4列表操作140
11.4.1Reduce()140
11.4.2判斷泛函141
11.4.3練習141
11.5數學泛函142
11.6應該保留的循環143
11.6.1原位修改143
11.6.2遞歸關係144
11.6.3while循環144
11.7創建一個函數係列145
第12章函數運算符149
12.1行為函數運算符150
12.1.1緩存152
12.1.2捕獲函數調用153
12.1.3惰性155
12.1.4練習155
12.2輸出函數運算符156
12.2.1簡單修飾156
12.2.2改變函數的輸出157
12.2.3練習158
12.3輸入函數運算符159
12.3.1預填充函數參數:局部函數應用159
12.3. 2改變輸入類型159
12.3.3練習160
12.4組合函數運算符161
12.4.1函數複合161
12.4.2邏輯判斷和布爾代數163
12.4.3練習163
第三部分語言計算
第13章非標準計算166
13.1表達式獲取167
13.2在子集中進行非標準計算168
13.3作用域問題171
13.4從其他函數調用173
13.5替換175
13.5.1為替換提供應急方案177
13.5.2捕獲未計算的表達式177
13.5.3練習178
13.6非標準計算的缺點178
第14章表達式180
14.1表達式的結構180
14.2名字183
14.3調用184
14.3.1修改調用185
14.3.2根據調用的元素來創建調用186
14.3.3練習186
14.4捕獲當前調用187
14.5成對列表189
14.6解析與逆解析191
14.7使用遞歸函數遍歷抽象語法樹192
14.7.1尋找F和T193
14.7.2尋找通過賦值創建的所有變量194
14.7.3修改調用樹197
14.7.4練習198
第15章領域特定語言200
15.1HTML200
15.1.1目標201
15.1.2轉義202
15.1.3基本標籤函數203
15.1.4標籤函數204
15.1.5處理所有標籤205
15.1.6練習206
15.2LaTeX206
15.2 .1LaTeX數學206
15.2.2目標207
15.2.3to_math207
15.2.4已知符號207
15.2.5未知符號208
15.2.6已知函數209
15.2.7未知函數210
15.2.8練習211
第四部分性能
第16章性能214
16.1R為什麼速度慢214
16.2微測試215
16.3語言性能216
16.3.1極端動態性216
16.3.2可變環境下的名字搜索218
16.3.3惰性求值開銷219
16.3.4練習219
16.4實現的性能220
16.4.1從數據框提取單一值220
16.4.2ifelse()、pmin()和pmax()220
16.4.3練習222
16.5其他的R實現222
第17章代碼優 ​​化225
17.1性能測試226
17.2改進性能229
17.3組織代碼229
17.4有人已經解決了這個問題嗎230
17.5盡可能少做231
17.6向量化236
17.7避免複製237
17.8字節碼編譯238
17.9案例研究:t檢驗238
17.10並行化240
17.11其他技術241
第18章內存243
18.1對像大小243
18.2內存使用與垃圾回收246
18.3使用lineprof對內存進行性能分析248
18.4原地修改250
18.4.1循環252
18.4.2練習253
第19章使用Rcpp編寫高性能函數254
19.1開始使用C++255
19.1.1沒有輸入,標量輸出256
19.1.2標量輸入,標量輸出256
19.1.3向量輸入,標量輸出257
19.1.4向量輸入,向量輸出258
19.1.5矩陣輸入,向量輸出258
19.1.6使用sourceCpp259
19.1.7練習260
19.2屬性和其他類261
19.2.1列表和數據框262
19.2.2函數262
19.2.3其他類型263
19.3缺失值263
19.3.1標量263
19.3.2字符串265
19.3.3布爾型265
19.3.4向量265
19.3.5練習266
19.4Rcpp語法糖266
19.4.1算術和邏輯運算符266
19.4.2邏輯總結函數267
19.4.3向量視圖267
19.4.4其他有用的函數267
19.5STL268
19.5.1使用迭代器268
19.5.2算法269
19.5.3數據結構270
19.5.4向量270
19.5.5集合271
19.5.6圖272
19.5.7練習272
19.6案例研究272
19.6.1Gibbs採樣器273
19.6.2R向量化與C++向量化274
19.7在添加包中應用Rcpp275
19.8更多學習資源276
19.9致謝277
第20章R的C接口278
20.1從R中調用C函數279
20.2C數據結構280
20.3創建和修改向量281
20.3.1創建向量和垃圾回收281
20.3.2缺失值和非有限值282
20.3.3訪問向量數據283
20.3.4字符向量和列表284
20.3.5修改輸入284
20.3.6強制轉換標量285
20.3.7長向量285
20.4成對列表286
20.5輸入驗證287
20.6尋找一個函數的C源代碼289
索引292