《R语言编程艺术》
基本信息
原书名:The Art of R Programming:A Tour of Statistical Software Design
作者: (美)Norman Matloff
译者: 陈堰平 邱怡轩 潘岚锋 熊熹
丛书名: 华章程序员书库
出版社:机械工业出版社
ISBN:9787111423140
上架时间:2013-5-27
出版日期:2013 年5月
开本:16开
页码:1
版次:1-1
所属分类:计算机
更多关于 》》》《
R语言编程艺术》
内容简介
计算机书籍
《r语言编程艺术》是r语言领域公认的经典著作,由著名计算机科学家兼统计学家撰写,amazon五星级畅销书。它是一本面向r语言开发者的纯编程类书籍,不需要读者具备统计学基础,从编程角度而非统计学角度系统讲解了r语言的数据结构、编程结构、语法、tcp/ip网络编程、并行计算、代码调试、程序性能优化、编程技巧以及r语言与其他语言的接口等所有与r编程相关的知识,几乎面面俱到。本书的实用性也非常强,44个精选的扩展案例,充分展示了r语言在数据处理和统计分析方面的强大能力。
全书一共16章:第1章介绍了学习r语言需要掌握的预备知识以及它的一些重要数据结构;第2~6章详细讲解了r语言的主要数据结构,包括向量、矩阵、数组、列表、数据框和因子;第7~13章全面讲解了r语言的语法,包括编程结构、面向对象特性、数学运算与模拟、输入与输出、字符串处理、绘图,以及r语言的调试方法。第14~16章讲解了r语言编程的高级内容,如执行速度和性能的提升、r语言与c/c++或python的混合编程,以及r语言的并行计算等。
目录
《r语言编程艺术》
译者序
前 言
致 谢
第1章 快速入门1
1.1 怎样运行r1
1.1.1 交互模式1
1.1.2 批处理模式2
1.2 第一个r会话3
1.3 函数入门5
1.3.1 变量的作用域7
1.3.2 默认参数8
1.4 r语言中一些重要的数据结构8
1.4.1 向量,r语言中的战斗机8
1.4.2 字符串9
1.4.3 矩阵9
1.4.4 列表10
1.4.5 数据框12
1.4.6 类12
1.5 扩展案例:考试成绩的回归分析13
.1.6 启动和关闭r16
1.7 获取帮助17
1.7.1 help()函数18
1.7.2 example()函数18
1.7.3 如果你不太清楚要查找什么19
1.7.4 其他主题的帮助20
1.7.5 批处理模式的帮助21
1.7.6 互联网资源21
第2章 向量22
2.1 标量、向量、数组与矩阵22
2.1.1 添加或删除向量元素22
2.1.2 获取向量长度23
2.1.3 作为向量的矩阵和数组24
2.2 声明24
2.3 循环补齐25
2.4 常用的向量运算26
2.4.1 向量运算和逻辑运算26
2.4.2 向量索引27
2.4.3 用:运算符创建向量28
2.4.4 使用seq()创建向量28
2.4.5 使用rep()重复向量常数29
2.5 使用all()和any()30
2.5.1 扩展案例:寻找连续出现1的游程30
2.5.2 扩展案例:预测离散值时间序列31
2.6 向量化运算符34
2.6.1 向量输入,向量输出34
2.6.2 向量输入,矩阵输出36
2.7 na与null值37
2.7.1 na的使用37
2.7.2 null的使用37
2.8 筛选38
2.8.1 生成筛选索引38
2.8.2 使用subset()函数筛选40
2.8.3 选择函数which()40
2.9 向量化的ifelse()函数41
2.9.1 扩展案例:度量相关性42
2.9.2 扩展案例:对鲍鱼数据集重新编码44
2.10 测试向量相等46
2.11 向量元素的名称47
2.12 关于c()的更多内容48
第3章 矩阵和数组49
3.1 创建矩阵49
3.2 一般矩阵运算50
3.2.1 线性代数运算50
3.2.2 矩阵索引51
3.2.3 扩展案例:图像操作52
3.2.4 矩阵元素筛选55
3.2.5 扩展案例:生成协方差矩阵57
3.3 对矩阵的行和列调用函数58
3.3.1 使用apply()函数58
3.3.2 扩展案例:寻找异常值60
3.4 增加或删除矩阵的行或列61
3.4.1 改变矩阵的大小61
3.4.2 扩展案例:找到图中距离最近的一对端点63
3.5 向量与矩阵的差异65
3.6 避免意外降维66
3.7 矩阵的行和列的命名问题68
3.8 高维数组68
第4章 列表71
4.1 创建列表71
4.2 列表的常规操作72
4.2.1 列表索引72
4.2.2 增加或删除列表元素73
4.2.3 获取列表长度75
4.2.4 扩展案例:文本词汇索引75
4.3 访问列表元素和值78
4.4 在列表上使用apply系列函数79
4.4.1 lapply()和sapply()的使用79
4.4.2 扩展案例:文本词汇索引(续)80
4.4.3 扩展案例:鲍鱼数据82
4.5 递归型列表83
第5章 数据框85
5.1 创建数据框85
5.1.1 访问数据框85
5.1.2 扩展案例:考试成绩的回归分析(续)86
5.2 其他矩阵式操作87
5.2.1 提取子数据框87
5.2.2 缺失值的处理88
5.2.3 使用rbind()和cbind()等函数89
5.2.4 使用apply()90
5.2.5 扩展案例:工资研究90
5.3 合并数据框92
5.4 应用于数据框的函数95
5.4.1 在数据框上应用lapply()和sapply()函数95
5.4.2 扩展案例:应用logistic模型95
5.4.3 扩展案例:学习中文方言的辅助工具96
第6章 因子和表102
6.1 因子与水平102
6.2 因子的常用函数103
6.2.1 tapply函数103
6.2.2 split()函数105
6.2.3 by()函数106
6.3 表的操作107
6.3.1 表中有关矩阵和类似数组的操作109
6.3.2 扩展案例: 提取子表111
6.3.3 扩展案例:在表中寻找频数最大的单元格113
6.4 其他与因子和表有关的函数114
6.4.1 aggregate()函数115
6.4.2 cut()函数115
第7章 r语言编程结构116
7.1 控制语句116
7.1.1 循环116
7.1.2 对非向量集合的循环119
7.1.3 if-else结构120
7.2 算术和逻辑运算符及数值121
7.3 参数的默认值122
7.4 返回值123
7.4.1 决定是否显式调用return ()124
7.4.2 返回复杂对象124
7.5 函数都是对象124
7.6 环境和变量作用域的问题127
7.6.1 顶层环境127
7.6.2 变量作用域的层次128
7.6.3 关于ls()的进一步讨论131
7.6.4 函数(几乎)没有副作用131
7.6.5 扩展案例:显示调用框的函数132
7.7 r语言中没有指针134
7.8 向上级层次进行写操作136
7.8.1 利用超赋值运算符对非局部变量进行写操作136
7.8.2 用assign()函数对非局部变量进行写操作137
7.8.3 扩展案例:用r语言实现离散事件仿真138
7.8.4 什么时候使用全局变量145
7.8.5 闭包147
7.9 递归148
7.9.1 quicksort的具体实现149
7.9.2 拓展举例:二叉查找树150
7.10 置换函数155
7.10.1 什么是置换函数155
7.10.2 扩展案例:可记录元素修改次数的向量类156
7.11 写函数代码的工具158
7.11.1 文本编辑器和集成开发环境158
7.11.2 edit()函数158
7.12 创建自己的二元运算符159
7.13 匿名函数159
第8章 数学运算与模拟161
8.1 数学函数161
8.1.1 扩展例子:计算概率161
8.1.2 累积和与累积乘积162
8.1.3 最小值和最大值162
8.1.4 微积分163
8.2 统计分布函数164
8.3 排序165
8.4 向量和矩阵的线性代数运算166
8.4.1 扩展示例:向量叉积169
8.4.2 扩展示例:确定马尔科夫链的平稳分布170
8.5 集合运算171
8.6 用r做模拟173
8.6.1 内置的随机变量发生器173
8.6.2 重复运行时获得相同的随机数流175
8.6.3 扩展案例:组合的模拟175
第9章 面向对象的编程177
9.1 s3类177
9.1.1 s3泛型函数177
9.1.2 实例:线性模型函数lm()中的oop178
9.1.3 寻找泛型函数的实现方法179
9.1.4 编写s3类181
9.1.5 使用继承182
9.1.6 扩展示例:用于存储上三角矩阵的类183
9.1.7 扩展示例:多项式回归程序187
9.2 s4类191
9.2.1 编写s4类191
9.2.2 在s4类上实现泛型函数193
9.3 s3类和s4类的对比193
9.4 对象的管理194
9.4.1 用ls()函数列出所有对象194
9.4.2 用rm()函数删除特定对象194
9.4.3 用save()函数保存对象集合195
9.4.4 查看对象内部结构196
9.4.5 exists()函数197
第10章 输入与输出198
10.1 连接键盘与显示器198
10.1.1 使用scan()函数198
10.1.2 使用readline()函数200
10.1.3 输出到显示器201
10.2 读写文件202
10.2.1 从文件中读取数据框或矩阵202
10.2.2 读取文本文件203
10.2.3 连接的介绍203
10.2.4 扩展案例:读取pums普查数据204
10.2.5 通过url在远程计算机上访问文件208
10.2.6 写文件209
10.2.7 获取文件和目录信息210
10.2.8 扩展案例:多个文件内容的和211
10.3 访问互联网211
10.3.1 tcp/ip概述212
10.3.2 r中的socket212
10.3.3 扩展案例:实现r的并行计算213
第11章 字符串操作216
11.1 字符串操作函数概述216
11.1.1 grep()216
11.1.2 nchar()216
11.1.3 paste()217
11.1.4 sprintf()217
11.1.5 substr()217
11.1.6 strsplit()217
11.1.7 regexpr()218
11.1.8 gregexpr()218
11.2 正则表达式218
11.2.1 扩展案例:检测文件名的后缀219
11.2.2 扩展案例:生成文件名220
11.3 在调试工具edtdbg中使用字符串工具221
第12章 绘图224
12.1 创建图形224
12.1.1 基础图形系统的核心:plot()函数224
12.1.2 添加线条:abline()函数225
12.1.3 在保持现有图形的基础上新增一个绘图窗口226
12.1.4 扩展案例:在一张图中绘制两条密度曲线227
12.1.5 扩展案例:进一步考察多项式回归228
12.1.6 添加点:points()函数231
12.1.7 添加图例:legend()函数231
12.1.8 添加文字:text()函数232
12.1.9 精确定位:locator()函数232
12.1.10 保存图形233
12.2 定制图形233
12.2.1 改变字符大小:cex选项233
12.2.2 改变坐标轴的范围:xlim和ylim选项234
12.2.3 添加多边形:polygon()函数235
12.2.4 平滑散点:lowess()和loess()函数236
12.2.5 绘制具有显式表达式的函数237
12.2.6 扩展案例:放大曲线的一部分237
12.3 将图形保存到文件240
12.3.1 r图形设备240
12.3.2 保存已显示的图形241
12.3.3 关闭r图形设备241
12.4 创建三维图形241
第13章 调试243
13.1 调试的基本原则243
13.1.1 调试的本质:确认原则243
13.1.2 从小处着手243
13.1.3 模块化的、自顶向下的调试风格244
13.1.4 反漏洞244
13.2 为什么要使用调试工具244
13.3 使用r的调试工具245
13.3.1 利用debug()和browser()函数进行逐步调试245
13.3.2 使用浏览器命令246
13.3.3 设置断点246
13.3.4 使用trace()函数进行追踪247
13.3.5 使用traceback()和debugger()函数对崩溃的程序进行检查248
13.3.6 扩展案例:两个完整的调试会话248
13.4 更方便的调试工具256
13.5 在调试模拟数据的代码时请确保一致性258
13.6 语法和运行时错误258
13.7 在r上运行gdb259
第14章 性能提升:速度和内存260
14.1 编写快速的r代码260
14.2 可怕的for循环260
14.2.1 用向量化提升速度261
14.2.2 扩展案例:在蒙特卡罗模拟中获得更快的速度262
14.2.3 扩展案例:生成幂次矩阵266
14.3 函数式编程和内存问题267
14.3.1 向量赋值问题267
14.3.2 改变时拷贝268
14.3.3 扩展案例:避免内存拷贝269
14.4 利用rprof()来寻找代码的瓶颈270
14.4.1 利用rprof()来进行监视270
14.4.2 rprof()的工作原理271
14.5 字节码编译273
14.6 内存无法装下数据怎么办273
14.6.1 分块274
14.6.2 利用r软件包来进行内存管理274
第15章 r与其他语言的接口275
15.1 编写能被r调用的c/c++函数275
15.1.1 r与c/c++交互的预备知识275
15.1.2 例子:提取方阵的次对角线元素275
15.1.3 编译和运行程序276
15.1.4 调试r/c程序277
15.1.5 扩展案例:预测离散取值的时间序列279
15.2 从python调用r281
15.2.1 安装rpy281
15.2.2 rpy语法282
第16章 r语言并行计算284
16.1 共同外链问题284
16.2 snow包简介285
16.2.1 运行snow代码285
16.2.2 分析snow代码287
16.2.3 可以获得多少倍的加速287
16.2.4 扩展案例:k均值聚类288
16.3 借助于c290
16.3.1 利用多核机器291
16.3.2 扩展案例:利用openmp解决共同外链问题291
16.3.3 运行openmp代码292
16.3.4 openmp代码分析293
16.3.5 其他openmp指令293
16.3.6 gpu编程294
16.4 普遍的性能考虑295
16.4.1 开销的来源295
16.4.2 简单并行程序,以及那些不简单的296
16.4.3 静态和动态任务分配297
16.4.4 软件炼金术:将一般的问题转化为简单并行问题299
16.5 调试r语言并行计算的代码299
附录a 安装r300
附录b 安装和使用包301