《图灵程序设计丛书:学习R》分为上下两部分,旨在指导你如何使用R,并提供练习的机会。上半部分主要介绍R的技术细节和使用技巧。每章都简要介绍了一组不同的数据类型(例如第4章介绍向量、矩阵和数组)或概念(例如第8章介绍分支和循环)。下半部分更侧重实践,展示了从输入数据到发布结果这一标准的数据分析流程。
即使你没有任何编程基础,也能顺利阅读《学习R》。
《图灵程序设计丛书:学习R》讲解如何使用R语言及其软件环境分析数据,即使没有编程经验也能看懂。通过这本实用教程,你可以轻松掌握如何使用必要的R工具来分析数据,同时掌握相关数据类型和通用的编程概念。
《图灵程序设计丛书:学习R》后半部分会讲到数据分析的各种实际应用,涵盖导入数据和发布结果。另外,值得一提的是,本书每一章都会结合所讲内容提供精心编制的小测试和练习题,需要编写R代码完成,从而巩固所学的知识。
R 是一种编程语言,也是用于数据分析和统计的软件环境。它是一个GNU 项目,这意味着它是自由的开源软件。它正在以指数级的速度不断成长——普遍认为,它的用户人数可能超过了100 万,它有4000 多个由开发社区贡献的附件包,而且每年以约25% 的速度增加。在本书创作之时,它在Tiobe 编程社区指数(Tiobe Programming Community Index)的开发语言流行榜上已排至第24 位,大致与SAS 和MATLAB 看齐。
R 广泛地应用在每一个需要统计或数据分析的领域,涵盖了金融、市场营销、医药、基因组学、流行病学、社会科学、教学以及许多其他较小的领域。
关于本书
因为R 主要用于统计分析,所以很多关于R 的书都在指导你如何计算统计或模型数据集。然而,这些书忽视了数据分析应用的实际情况。事实上,除非你做的是尖端研究,否则你所用到的统计技术往往只需用于常规任务,而且你的模型可能也不大。完整的数据分析流程更像是这样:
(1) 取得一些数据;
(2) 清理数据;
(3) 探索和可视化数据;
(4) 数据建模并做出预测;
(5) 展示或发布你的结果。
当然,每个阶段都可能碰到一些有趣的问题,以至于你需要更多的数据,或者要以不同的方式处理现有数据,这会使你的工作倒退一步。工作流是可以迭代的,但每个步骤都不可或缺。
本书的第一部分会从头开始教你R——你不需要任何编程语言的经验。实际上,虽然完全没有编程经验也无妨,但有一些基本的编程知识会更好。例如,本书介绍了如何注释代码以及编写for 循环,但没有作更详细的解释。因此,如果你想要找本真正的编程入门课本,那么Jason R。 Briggs 写的Python for Kids 非常合适!
本书的第二部分将展示R 语言的完整数据分析流程,这里需要一些基本的统计知识。例如,你应该了解平均值和标准差等术语,以及什么是条形图(bar chart)。
本书最后将介绍R 的一些高级主题,例如面向对象编程和包的创建。Garrett Grolem 的Data Analysis with R 将会在本书的基础上深入探讨数据分析流程。
Richard Cotton,是一位通晓化学安全及健康的数据科学家,开发过很多能让非专业用户访问统计模型的工具。他开发了很多R包,如assertive(用于检查变量的状态)和sig(用于确保功能具有合理的API)。他也是The Damned Liars公司的统计学顾问。
译者序 XII
前言 XIII
第一部分 R语言
第1章 简介 2
1.1 本章目标 2
1.2 R是什么 2
1.3 安装R 3
1.4 选择一个IDE 4
1.4.1 Emacs+ESS 4
1.4.2 Eclipse/Architect 4
1.4.3 RStudio 5
1.4.4 Revolution-R 5
1.4.5 Live-R 5
1.4.6 其他IDE和编辑器 6
1.5 你的第一个程序 6
1.6 如何从R中获得帮助 7
1.7 安装其他相关软件 9
1.8 小结 9
1.9 知识测试:问题 10
1.10 知识测试:练习 10
第2章 科学计算器 11
2.1 本章目标 11
2.2 数学运算符和向量 11
2.3 变量赋值 15
2.4 特殊数字 17
2.5 逻辑向量 18
2.6 小结 20
2.7 知识测试:问题 20
2.8 知识测试:练习 20
第3章 检查变量和工作区 22
3.1 本章目标 22
3.2 类 22
3.3 不同类型的数字 23
3.4 其他通用类 24
3.5 检查和更改类 26
3.6 检查变量 29
3.7 工作区 32
3.8 小结 33
3.9 知识测试:问题 33
3.10 知识测试:练习 34
第4章 向量、矩阵和数组 35
4.1 本章目标 35
4.2 向量 35
4.2.1 序列 37
4.2.2 长度 38
4.2.3 命名 39
4.2.4 索引向量 39
4.2.5 向量循环和重复 41
4.3 矩阵和数组 43
4.3.1 创建数组和矩阵 43
4.3.2 行、列和维度 45
4.3.3 行名、列名和维度名 46
4.3.4 索引数组 47
4.3.5 合并矩阵 47
4.3.6 数组算术 48
4.4 小结 50
4.5 知识测试:问题 50
4.6 知识测试:练习 51
第5章 列表和数据框 52
5.1 本章目标 52
5.2 列表 52
5.2.1 创建列表 52
5.2.2 原子变量和递归变量 54
5.2.3 列表的维度和算术运算 55
5.2.4 索引列表 56
5.2.5 向量和列表之间的转换 58
5.2.6 组合列表 60
5.3 NULL 61
5.4 成对列表 64
5.5 数据框 65
5.5.1 创建数据框 65
5.5.2 索引数据框 68
5.5.3 基本数据框操作 69
5.6 小结 71
5.7 知识测试:问题 71
5.8 知识测试:练习 72
第6章 环境和函数 73
6.1 本章目标 73
6.2 环境 73
6.3 函数 76
6.3.1 创建和调用函数 76
6.3.2 向其他函数传递和接收函数 80
6.3.3 变量的作用域 82
6.4 小结 84
6.5 知识测试:问题 84
6.6 知识测试:练习 84
第7章 字符串和因子 86
7.1 本章目标 86
7.2 字符串 86
7.2.1 创建和打印字符串 87
7.2.2 格式化数字 88
7.2.3 特殊字符 90
7.2.4 更改大小写 91
7.2.5 截取字符串 91
7.2.6 分割字符串 92
7.2.7 文件路径 93
7.3 因子 94
7.3.1 创建因子 94
7.3.2 更改因子水平 96
7.3.3 去掉因子水平 96
7.3.4 有序因子 97
7.3.5 将连续变量转换为类别 98
7.3.6 将类别变量转换为连续变量 99
7.3.7 生成因子水平 100
7.3.8 合并因子 100
7.4 小结 101
7.5 知识测试:问题 101
7.6 知识测试:练习 101
第8章 流程控制和循环 103
8.1 本章目标 103
8.2 流程控制 103
8.2.1 if和else 103
8.2.2 矢量化的if 105
8.2.3 多个分支 106
8.3 循环 108
8.3.1 重复循环 108
8.3.2 while循环 110
8.3.3 for循环 111
8.4 小结 113
8.5 知识测试:问题 113
8.6 知识测试:练习 113
第9章 高级循环 115
9.1 本章目标 115
9.2 replication 115
9.3 遍历列表 116
9.4 遍历数组 122
9.5 多个输入的应用函数 124
9.6 拆分-应用-合并(Split-Apply-Combine) 126
9.7 plyr包 127
9.8 小结 130
9.9 知识测验:问题 130
9.10 知识测试:练习 131
第10章 包 133
10.1 本章目标 133
10.2 加载包 133
10.2.1 搜索路径 135
10.2.2 库和已安装的包 136
10.3 安装包 137
10.4 维护包 139
10.5 小结 139
10.6 知识测试:问题 140
10.7 知识测试:练习 140
第11章 日期和时间 141
11.1 本章目标 141
11.2 日期和时间类 141
11.2.1 POSIX日期和时间 142
11.2.2 Date类 143
11.2.3 其他日期类 144
11.3 日期与字符串的相互转换 144
11.3.1 解析日期 144
11.3.2 格式化日期 145
11.4 时区 145
11.5 日期和时间的算术运算 147
11.6 lubridate 149
11.7 小结 153
11.8 知识测试:问题 153
11.9 知识测试:练习 153
第二部分 数据分析工作流
第12章 获取数据 156
12.1 本章目标 156
12.2 内置的数据集 156
12.3 读取文本文件 157
12.3.1 CSV和制表符分隔(Tab-Delimited)文件 157
12.3.2 非结构化文本文件 161
12.3.3 XML和HTML文件 161
12.3.4 JSON和YAML文件 163
12.4 读取二进制文件 165
12.4.1 读取Excel文件 165
12.4.2 读取SAS、Stata、SPSS和MATLAB文件 167
12.4.3 读取其他文件类型 167
12.5 Web数据 168
12.5.1 拥有API的网站 168
12.5.2 抓取网页 169
12.6 访问数据库 171
12.7 小结 174
12.8 知识测试:问题 174
12.9 知识测试:练习 174
第13章 数据清理和转换 175
13.1 本章目标 175
13.2 清理字符串 175
13.3 操作数据框 180
13.3.1 添加和替换列 180
13.3.2 处理缺失值 181
13.3.3 在宽和长表格之间进行转换 182
13.3.4 使用SQL 183
13.4 排序 184
13.5 函数式编程 185
13.6 小结 188
13.7 知识测试:问题 188
13.8 知识测试:练习 189
第14章 探索和可视化 190
14.1 本章目标 190
14.2 汇总统计 190
14.3 三种绘图系统 194
14.4 散点图 195
14.4.1 第一种方法:base绘图法 195
14.4.2 第二种方法:lattice图形系统 200
14.4.3 第三种方法:ggplot2图形系统 207
14.5 线图 212
14.6 直方图 220
14.7 箱线图 232
14.8 条形图 236
14.9 其他的绘图包和系统 242
14.10 小结 243
14.11 知识测试:问题 243
14.12 知识测试:练习 244
第15章 分布与建模 245
15.1 本章目标 245
15.2 随机数 246
15.2.1 示例函数 246
15.2.2 从分布中抽样 247
15.3 分布 248
15.4 公式 248
15.5 第一个模型:线性回归 250
15.5.1 比较和更新模型 252
15.5.2 绘图和模型检查 257
15.6 其他模型类型 261
15.7 小结 262
15.8 知识测试:问题 263
15.9 知识测试:练习 263
第16章 程序设计 264
16.1 本章目标 264
16.2 信息、警告和错误 264
16.3 错误处理 267
16.4 调试 270
16.5 测试 273
16.5.1 RUnit 273
16.5.2 testthat 276
16.6 魔法 277
16.6.1 将字符串转换成代码 277
16.6.2 把代码转换成字符串 279
16.7 面向对象编程 280
16.7.1 S3类 281
16.7.2 引用类 282
16.8 小结 287
16.9 知识测试:问题 287
16.10 知识测试:练习 288
第17章 制作程序包 289
17.1 本章目标 289
17.2 为什么要创建软件包 289
17.3 先决条件 289
17.4 包目录结构 290
17.5 你的第一个包 291
17.6 为包撰写文档 293
17.7 检查和构建包 296
17.8 包的维护 297
17.9 小结 298
17.10 知识测试:问题 299
17.11 知识测试:练习 299
第三部分 附录
附录A 变量的属性 302
附录B R中其他可做的事情 305
附录C 问题答案 307
附录D 练习答案 315
参考文献 339
关于封面 341