2015 版
R 语言高级程序设计
——《Advanced R》中文版
原著者:Hadley Wickham
译者:刘宁
修改日期:2015-09-01
R 语言高级程序设计
1
目 录
前言 ...................................................................................................................................................................... 9
译者简介 .................................................................................................................................................. 9
译者序 .................................................................................................................................................... 10
中文版版权声明 ................................................................................................................................ 11
第一部分 基础知识 .................................................................................................................................... 12
1 介绍 ..................................................................................................................................................... 12
1.1 谁应该阅读本书? ......................................................................................................... 14
1.2 你在本书中能学到什么? .......................................................................................... 15
1.3 元技术 .................................................................................................................................. 16
1.4 推荐阅读 ............................................................................................................................. 16
1.5 得到帮助 ............................................................................................................................. 17
1.6 鸣谢 ....................................................................................................................................... 18
1.7 约定 ....................................................................................................................................... 18
1.8 版权声明 ............................................................................................................................. 19
2 数据结构 ........................................................................................................................................... 20
2.1 向量 ....................................................................................................................................... 21
2.2 属性 ....................................................................................................................................... 27
2.3 矩阵和数组 ........................................................................................................................ 33
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com
R 语言高级程序设计
2
2.4 数据框 .................................................................................................................................. 37
2.5 答案 ....................................................................................................................................... 41
3 取子集操作 ...................................................................................................................................... 43
3.1 数据类型 ............................................................................................................................. 44
3.2 取子集操作符 ................................................................................................................... 52
3.3 取子集与赋值 ................................................................................................................... 57
3.4 应用 ....................................................................................................................................... 59
3.5 答案 ....................................................................................................................................... 70
4 词汇表 ................................................................................................................................................ 71
4.1 基础 ....................................................................................................................................... 71
4.2 通用数据结构 ................................................................................................................... 74
4.3 统计学 .................................................................................................................................. 75
4.4 使用 R 语言工作 ............................................................................................................. 76
4.5 输入/输出 ........................................................................................................................... 77
5 编码风格指南 ................................................................................................................................. 79
5.1 标识符和命名 ................................................................................................................... 79
5.2 语法 ....................................................................................................................................... 81
5.3 组织 ....................................................................................................................................... 85
6 函数 ..................................................................................................................................................... 86
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com
R 语言高级程序设计
3
6.1 函数的组成部分 .............................................................................................................. 88
6.2 词法作用域 ........................................................................................................................ 90
6.3 所有的操作都是函数调用 .......................................................................................... 97
6.4 函数参数 ...........................................................................................................................100
6.5 特殊调用 ...........................................................................................................................110
6.6 返回值 ................................................................................................................................114
6.7 小测验答案 ......................................................................................................................120
7 面向对象指南 ...............................................................................................................................121
7.1 基本类型 ...........................................................................................................................123
7.2 S3 ..........................................................................................................................................124
7.3 S4 ..........................................................................................................................................134
7.4 引用类 ................................................................................................................................141
7.5 选择一种系统 .................................................................................................................145
7.6 小测验答案 ......................................................................................................................146
8 环境 ...................................................................................................................................................147
8.1 环境基础 ...........................................................................................................................148
8.2 在环境中进行递归 .......................................................................................................156
8.3 函数环境 ...........................................................................................................................159
8.4 把名字绑定到值上 .......................................................................................................170
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com
R 语言高级程序设计
4
8.5 显式环境 ...........................................................................................................................174
8.6 小测验答案 ......................................................................................................................176
9 调试、条件处理和防御性编程 ............................................................................................178
9.1 调试技术 ...........................................................................................................................180
9.2 调试工具 ...........................................................................................................................182
9.3 条件处理 ...........................................................................................................................191
9.4 防御性编程 ......................................................................................................................201
9.5 小测验答案 ......................................................................................................................203
第二部分 函数式编程 ............................................................................................................................. 205
10 函数式编程 .................................................................................................................................205
10.1 使用函数式编程的动机 ...........................................................................................206
10.2 匿名函数 .........................................................................................................................212
10.3 闭包 ...................................................................................................................................214
10.4 函数列表 .........................................................................................................................221
10.5 案例研究:数值积分 ................................................................................................227
11 泛函 ................................................................................................................................................231
11.1 我的第一个泛函: lapply() ......................................................................................233
11.2 for 循环泛函:lapply()的朋友们 .......................................................................238
11.3 操作矩阵和数据框 .....................................................................................................249
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com
R 语言高级程序设计
5
11.4 操作列表 .........................................................................................................................256
11.5 数学泛函 .........................................................................................................................259
11.6 循环应该被保留的情况 ...........................................................................................262
11.7 函数族 ..............................................................................................................................265
12 函数运算符 .................................................................................................................................273
12.1 行为函数运算符 ..........................................................................................................275
12.2 输出函数运算符 ..........................................................................................................287
12.3 输入函数运算符 ..........................................................................................................291
12.4 联合函数运算符 ..........................................................................................................295
第三部分 编程语言层面的计算 ......................................................................................................... 301
13 非标准计算 .................................................................................................................................301
13.1 捕获表达式 ....................................................................................................................303
13.2 子集中的非标准计算 ................................................................................................305
13.3 作用域问题 ....................................................................................................................310
13.4 从另一个函数进行调用 ...........................................................................................313
13.5 substitute() ...................................................................................................................318
13.6 非标准计算的缺点 .....................................................................................................323
14 表达式 ...........................................................................................................................................326
14.1 表达式的结构 ...............................................................................................................326
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com
R 语言高级程序设计
6
14.2 名字 ...................................................................................................................................332
14.3 调用 ...................................................................................................................................334
14.4 捕获当前调用 ...............................................................................................................339
14.5 成对列表 .........................................................................................................................343
14.6 解析与逆解析 ...............................................................................................................347
14.7 使用递归函数遍历抽象语法树 ............................................................................349
15 领域特定语言 ............................................................................................................................362
15.1 HTML ...............................................................................................................................363
15.2 LaTeX ...............................................................................................................................373
第四部分 性能 ............................................................................................................................................ 384
16 性能 ................................................................................................................................................384
16.1 R 语言为什么慢? .....................................................................................................385
16.2 微基准测试 ....................................................................................................................386
16.3 语言性能 .........................................................................................................................388
16.4 实现性能 .........................................................................................................................395
16.5 其它的 R 语言实现 ....................................................................................................399
17 优化代码 ......................................................................................................................................404
17.1 测量性能 .........................................................................................................................406
17.2 改善性能 .........................................................................................................................411
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com
R 语言高级程序设计
7
17.3 代码组织 .........................................................................................................................411
17.4 有人已经解决了这个问题吗? ............................................................................413
17.5 尽量少做 .........................................................................................................................415
17.6 向量化 ..............................................................................................................................424
17.7 避免复制 .........................................................................................................................426
17.8 编译成字节码 ...............................................................................................................428
17.9 案例研究:t 检验 ......................................................................................................429
17.10 并行化 ...........................................................................................................................432
17.11 其它技术 ......................................................................................................................434
18 内存 ................................................................................................................................................436
18.1 对象的大小 ....................................................................................................................437
18.2 内存使用和垃圾收集 ................................................................................................443
18.3 内存分析与 lineprof .................................................................................................446
18.4 就地修改 .........................................................................................................................450
19 使用 Rcpp 包编写高性能函数 ...........................................................................................457
19.1 开始使用 C++ ...............................................................................................................459
19.2 属性和其它的类 ..........................................................................................................470
19.3 缺失值 ..............................................................................................................................474
19.4 Rcpp 语法糖 .................................................................................................................478
需要帮助请咨询 QQ:59739150 E-mail: liuning.1982@qq.com