首页>参考读物>计算机科学与技术>综合

高级R语言编程指南(原书第2版)
作者 : [美] 哈德利·威克汉姆(Hadley Wickham)著
译者 : 潘文捷 许金炜 李洪成 译
出版日期 : 2020-08-12
ISBN : 978-7-111-66303-4
定价 : 139.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 389
开本 : 16
原书名 : Advanced R, Second Edition
原出版社: Taylor & Francis -CRC Press
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书从R语言的基础知识入手,深入介绍了R函数式编程、R语言的面向对象特性、程序的调试、代码优化和性能调优。同时,本书也介绍了R语言如何与HTML和LaTex语言结合的技术,介绍了高性能计算以及C语言编程接口。

图书特色

图书前言

欢迎使用《高级R语言编程指南》的第2版。本版有三个主要目标:
增加我在第1版发布后才完全理解的重要概念。
减少已不太实用的主题,以及我认为确实令人兴奋但结果却不那么实用的主题。
使用更好的文本、更清晰的代码和更多的图表,使内容更易于理解。
如果你熟悉第1版,就会发现此前言介绍了主要的改动,以便你可以将重点放在新的领域上。如果你正在阅读本书的印刷版本,你会很快注意到一个变化:书中包含了100多个新图表。
本版中的另一个重大变化是使用了新的添加包,尤其是rlang(http://rlang.r-lib.org),它为低级数据结构和操作提供了干净的接口。第1版几乎完全使用了基础包的R函数,这给教学带来了挑战,因为许多函数是多年独立发展的,所以很难看到隐藏在函数名称和参数的偶然变化中的重要基础思想。我将继续在各节的脚注中以及需要的地方显示基本等价的内容。但是如果你希望在本书中看到这些想法的最纯粹的R基础包中的表示,我建议你阅读第1版。你可以在线访问http://adv-r.had.co.nz。
自第1版出版以来的5年中,R的基础没有改变,但是我对它们的理解确实有所改变。因此,本书第一部分总体结构大致保持不变,但是许多单独的章节已得到很大改进:
第2章是全新的一章,可帮助你了解对象和对象名字之间的区别。这有助于你更准确地预测R将在何时复制数据结构,并为理解函数式编程奠定重要基础。
第3章(第1版中称为“数据结构”)已被改写,着重于向量类型,例如整数、因子和数据框。它包含主要的S3向量的更多详细信息(例如日期和日期时间),讨论了tibble添加包提供的数据框变化[Müller and Wickham,2018],并总体上反映了我对向量数据类型的理解。
第4章现在通过[和[[的用途来对它们进行区分:[提取多个值,而[[提取单个值(以前,它们是通过“简化”或“保留”来表征的)。4.3节的“练习”帮助你了解如何在列表中使用[[,并引入新函数,这些函数为越界索引提供了更一致的行为。
第5章是全新的一章,介绍了之前被我遗忘了的重要工具,例如if语句和for循环。
第6章的顺序得到了改进,引入了管道符(%>%)作为函数编写的第三种方式(6.3节),并且显著改善了函数形式的覆盖范围(6.8节)。
第7章对特殊环境进行重新组织(7.4节),并对调用堆栈的讨论进行改进(7.5节)。
第8章包含第1版的“异常和调试”中的内容,以及有关R条件系统如何工作的许多新内容。该章还介绍如何创建自定义条件类(8.5节)。
接下来的章节围绕R中三个最重要的编程范例—函数式编程、面向对象编程和元编程,进行重新组织。
现在,将函数式编程更清晰地分为三种主要技术:泛函(第9章)、函数工厂(第10章)和函数运算符(第11章)。本书专注于R在数据科学中的实际应用,并减少了一部分纯理论内容。
这些章节现在使用purrr添加包提供的函数[Henry and Wickham,2018a],这些函数使我可以将更多的精力放在基础思想上,而不是偶然的细节上。由于主要用途是解决基本函数中省略号(...)的问题,因此大大简化了第11章。
面向对象编程(OOP)现在构成了本书的主要部分,其中包括一些全新章节:基础类型(第12章)、S3(第13章)、R6(第14章)、S4(第15章)以及系统之间的权衡(第16章)。
这些章节重点介绍不同对象系统的工作方式,而不是如何有效地使用它们。这是很有必要的,因为许多技术细节未在其他地方进行描述,并且有效使用OOP需要一本完整的书来专门学习。
元编程(第1版中称为“语言计算”)描述“可使用代码生成代码”的工具套件。与第1版相比,该部分得到了很大的扩展,现在集中在“tidy计算”上,这是一套使元编程安全、有原则并且可供更多R程序员使用的思想和理论。第17章粗略地阐述各个部分如何组合在一起。第18章描述底层的数据结构。第19章涵盖引用和取消引用。第20章介绍在特定环境中对代码的求值。第21章将所有主题融合在一起,以展示如何从一种(编程)语言转换为另一种语言。
本书最后部分的各章汇总了一些编程技术:性能分析、衡量和改进以及Rcpp。这部分内容与第1版非常相似,尽管组织有所不同。在这些章节中,我进行了一些小小的更新,特别是使用了较新的添加包(microbenchmark改为bench,lineprof改为profvis),但是大部分内容是相同的。
虽然第2版主要新增了一些内容,但是也删除了5章:
词汇这一章已被删除,因为它总是有点奇怪。比起在书中单列一章,以词汇表的方式呈现更加有效。
样式这一章已替换为在线样式指南,网址为http://style.tidyverse.org/。样式指南与新的styler添加包[Müller and Walthert,2018]配对使用,该添加包可以自动应用许多规则。
C语言这一章已移至https://github.com/hadley/r-internals,随着时间的推移,该章将为编写与R数据结构一起使用的C代码提供指南。
内存这一章已被删除,许多材料已集成到第2章中,其余的则被认为技术性太强,理解起来并不那么重要。
删除了有关R语言的性能这一章,这章几乎没有提供可行的见解,并且随着R的变化已过时。

上架指导

计算机\数据科学

封底文字

本书主要内容:
  对象与其名称之间的区别,以及理解这种区别的重要性。
  重要的向量数据结构,如何对它们进行组合,以及如何使用子集选取将它们分开。
  函数和环境的细节。
  可以报告消息、警告和错误等信息的条件系统。
  强大的函数式编程范式,可以代替许多for循环。
  三个重要的面向对象系统:S3、S4和R6。
  用于元编程的tidy工具包,使你可以操纵代码并控制评估。
  无论代码如何运行,都可以有效部署的调试技术。
  如何查找和消除性能的瓶颈。
第2版的更新如下:
  第一部分增加三章新的内容:名字和取值、控制流、条件。
  全面介绍面向对象编程,涵盖S3、R6、S4,以及如何在它们中进行选择。
  更深入地介绍元编程,包括新的tidy评估框架。
使用新的添加包,如rlang(http://rlang.r-lib.org)和purrr(http://purrr.tidyverse.org/)进行函数式编程。添加包rlang为低级操作提供了简洁的接口。

译者序

随着大数据的概念变得越来越流行,对数据的探索、分析和预测已经成为大数据分析领域的基本技能之一。作为探索和分析数据的基本工具,数据分析软件包是必不可少的。R软件作为功能强大且开源的数据分析工具,现在已经成为数据分析领域必不可少的工具之一。市场上出版了大量与R语言有关的书籍,这些书籍基本可以分为两类:一类是通过R语言介绍某个主题或者学科知识;另一类是介绍R软件或者R语言的入门知识。而本书则是深入介绍R语言及其编程技术的书籍,属于更深入的R语言知识。
本书从R语言的基础知识入手,深入介绍R语言的函数式编程、面向对象编程(R语言的S3、R6和S4)、元编程、调试、衡量性能和性能调优。同时,本书也介绍了R语言如何与HTML和LaTex语言相结合的技术,以及C++语言编程接口。
本书作者Hadley Wickham是R语言专家,他编写了许多高质量的R添加包,例如ggplot2、 plyr、reshape2 等,这些都是在R社区广泛使用的添加包。他是数据分析的标准添加包tidyverse的开发者。由于他在统计计算和数据分析领域具有广泛影响,他获得了2019年的国际COPSS总统奖。读者通过本书的学习,一方面可以更深入地了解R语言编程的核心知识,另一方面也可以在某种程度上了解这样一位知名R语言专家所编写的R添加包。
本书的主要内容分为五部分:基础知识、函数式编程、面向对象编程、元编程、高级技术。第一部分详细介绍R语言的基础知识,包括向量、子集选取、控制流、函数、环境和条件;第二部分介绍函数式编程,包括泛函、函数工厂、函数运算符;第三部分介绍面向对象编程(S3、R6和S4);第四部分介绍元编程技术,包括表达式、准引用、计算和领域特定语言(HTML和LaTex);第五部分介绍R语言的高级技术,包括调试、衡量性能、改进性能、C++语言编程接口等。
本书是一本R语言进阶教程,不管是初学者还是具有一定编程经验的R语言用户,都可以从本书获益。初学者可以先从第一部分入手,然后根据需要逐步学习后面的部分。熟练的R语言用户可以从自己感兴趣的内容入手。
本书的翻译工作由潘文捷、许金炜和李洪成共同完成。
由于时间和水平所限,译文难免会有不当之处,希望同行和读者多加指正。

图书目录

译者序
前言
第1章 绪论 1
1.1 为什么选择R语言 1
1.2 本书的目标读者 2
1.3 通过本书你可以学到什么 3
1.4 通过本书你将不能学到什么 3
1.5 元技术 3
1.6 推荐阅读 4
1.7 获取帮助 4
1.8 致谢 5
1.9 约定 8
1.10 声明 8
第一部分 基础知识
第2章 名字和取值 12
2.1 本章简介 12
2.2 绑定基础 13
2.3 复制后修改 15
2.4 对象大小 19
2.5 原位修改 20
2.6 解除绑定和垃圾回收 23
2.7 小测验答案 24
第3章 向量 25
3.1 本章简介 25
3.2 原子向量 26
3.3 属性 29
3.4 S3原子向量 31
3.5 列表 35
3.6 数据框和tibble 37
3.7 NULL 44
3.8 小测验答案 44
第4章 子集选取 46
4.1 本章简介 46
4.2 选择多个元素 47
4.3 选择一个元素 52
4.4 子集选取与赋值 54
4.5 应用 55
4.6 小测验答案 60
第5章 控制流 61
5.1 本章简介 61
5.2 选择 61
5.3 循环 65
5.4 小测验答案 67
第6章 函数 68
6.1 本章简介 68
6.2 函数基础 69
6.3 函数组合 72
6.4 词法作用域 73
6.5 惰性求值 76
6.6 ...参数 80
6.7 退出函数 82
6.8 函数形式 85
6.9 小测验答案 91
第7章 环境 92
7.1 本章简介 92
7.2 环境基础 93
7.3 环境递归 98
7.4 特殊环境 100
7.5 调用堆栈 105
7.6 模拟数据结构 107
7.7 小测验答案 108
第8章 条件 109
8.1 本章简介 109
8.2 信号条件 110
8.3 忽视条件 114
8.4 处理条件 115
8.5 自定义条件 121
8.6 应用 124
8.7 小测验答案 129
第二部分 函数式编程
第9章 泛函 133
9.1 本章简介 133
9.2 第一个泛函:map() 134
9.3 purrr风格 141
9.4 map变体 142
9.5 reduce系列 148
9.6 判断泛函 152
9.7 基础泛函 154
第10章 函数工厂 156
10.1 本章简介 156
10.2 工厂基础 157
10.3 图形工厂 161
10.4 统计工厂 165
10.5 函数工厂+泛函 169
第11章 函数运算符 172
11.1 本章简介 172
11.2 现有的函数运算符 173
11.3 案例学习:生成你自己的
   函数运算符 177
第三部分 面向对象编程
第12章 基础类型 185
12.1 本章简介 185
12.2 基础对象与OO对象 185
12.3 基础类型 186
第13章 S3 188
13.1 本章简介 188
13.2 基础 189
13.3 类 191
13.4 泛型和方法 196
13.5 对象风格 198
13.6 继承 199
13.7 分派细节 203
第14章 R6 207
14.1 本章简介 207
14.2 类和方法 208
14.3 控制访问 212
14.4 引用语义 214
14.5 为什么是R6 217
第15章 S4 218
15.1 本章简介 218
15.2 基础 219
15.3 类 220
15.4 泛型和方法 223
15.5 方法分派 226
15.6 S4和S3 229
第16章 权衡 232
16.1 本章简介 232
16.2 S4与S3 232
16.3 R6与S3 233
第四部分 元编程
第17章 元编程概述 239
17.1 本章简介 239
17.2 代码是数据 240
17.3 代码是树 241
17.4 代码能生成代码 241
17.5 计算表达式 242
17.6 使用函数进行自定义计算 243
17.7 使用数据进行自定义计算 244
17.8 quosure 244
第18章 表达式 246
18.1 本章简介 246
18.2 抽象语法树 247
18.3 表达式 250
18.4 解析与语法 254
18.5 使用递归函数遍历抽象语法树 258
18.6 专用数据结构 263
第19章 准引用 266
19.1 本章简介 266
19.2 动机 267
19.3 引用 269
19.4 取消引用 272
19.5 非引用 277
19.6 “...” 279
19.7 案例学习 283
19.8 历史 287
第20章 计算 288
20.1 本章简介 288
20.2 计算基础 289
20.3 quosure 292
20.4 数据掩码 295
20.5 使用tidy计算 299
20.6 使用R基础包计算 301
第21章 翻译R代码 308
21.1 本章简介 308
21.2 HTML 309
21.3 LaTeX 315
第五部分 高级技术
第22章 调试 324
22.1 本章简介 324
22.2 整体方法 324
22.3 定位错误 325
22.4 交互式调试器 327
22.5 非交互式调试 329
22.6 非错误故障 331
第23章 衡量性能 333
23.1 本章简介 333
23.2 性能分析 333
23.3 微测试 337
第24章 改进性能 340
24.1 本章简介 340
24.2 组织代码 341
24.3 检查现有解决方案 342
24.4 尽可能少做 342
24.5 向量化 345
24.6 避免复制 346
24.7 案例研究:t检验 347
24.8 其他技巧 349
第25章 使用C++重写R代码 350
25.1 本章简介 350
25.2 开始使用C++ 351
25.3 其他类 357
25.4 缺失值 358
25.5 标准模板库 361
25.6 案例研究 365
25.7 在添加包中应用Rcpp 368
25.8 更多学习资源 369
25.9 致谢 370
参考文献 371
索引 374

教学资源推荐
作者: [美]马克 N.霍伦斯坦(Mark N. Horenstein)著
作者: (美) Hector Garcia-Molina (斯坦福大学) Jeffrey D. Ullman (斯坦福大学) Jennifer Widom(斯坦福大学)著
作者: 黄宜华 主编 苗凯翔 副主编
作者: [美]丹尼尔·A.弗莱施(Daniel A. Fleisch)著
参考读物推荐
作者: Malcolm Craig
作者: (美)Johnny Cache,Joshua Wright, Vincent Liu 著