编辑推荐

  著名计算机科学家兼统计学家撰写,R语言领域公认经典著作。
  从纯编程角度系统讲解R语言的数据结构、编程结构、语法、TCP/IP网络编程、并行计算、代码调试、程序性能优化、编程技巧以及R语言与其他语言的接口。

海报:

内容简介

  《华章科技:R语言编程艺术》是R语言领域公认的经典著作,由著名计算机科学家兼统计学家撰写,它是一本面向R语言开发者的纯编程类书籍,不需要读者具备统计学基础,从编程角度而非统计学角度系统讲解了R语言的数据结构、编程结构、语法、TCP/IP网络编程、并行计算、代码调试、程序性能优化、编程技巧以及R语言与其他语言的接口等所有与R编程相关的知识,几乎面面俱到。《华章科技:R语言编程艺术》的实用性也非常强,44个精选的扩展案例,充分展示了R语言在数据处理和统计分析方面的强大能力。
  《华章科技:R语言编程艺术》一共16章:第1章介绍了学习R语言需要掌握的预备知识以及它的一些重要数据结构;第2~6章详细讲解了R语言的主要数据结构,包括向量、矩阵、数组、列表、数据框和因子;第7~13章全面讲解了R语言的语法,包括编程结构、面向对象特性、数学运算与模拟、输入与输出、字符串处理、绘图,以及R语言的调试方法。第14~16章讲解了R语言编程的高级内容,如执行速度和性能的提升、R语言与C/C++或Python的混合编程,以及R语言的并行计算等。

作者简介

  NormanMatloff,著名计算机科学家兼统计学家,美国加州大学戴维斯分校计算机科学系教授,曾是该校统计专业的创建者之一,并担任过统计学教授,对并行编程、网络流量、数据挖掘、磁盘系统性能等方面的技术都有深入的研究。他乐于分享,撰写了多部广受欢迎的关于软件开发的在线教程,多次为《纽约时报》、《华盛顿邮报》、《福布斯杂志》以及《洛杉矶时报》撰写文章,是《TheArtofDebugging》的作者之一。

目录

译者序
致谢
第1章快速入门
1.1怎样运行R
1.1.1交互模式
1.1.2批处理模式
1.2第一个R会话
1.3函数入门
1.3.1变量的作用域
1.3.2默认参数
1.4R语言中一些重要的数据结构
1.4.1向量,R语言中的战斗机
1.4.2字符串
1.4.3矩阵
1.4.4列表
1.4.5数据框
1.4.6类
1.5扩展案例:考试成绩的回归分析
1.6启动和关闭R
1.7获取帮助
1.7.1help()函数
1.7.2example()函数
1.7.3如果你不太清楚要查找什么
1.7.4其他主题的帮助
1.7.5批处理模式的帮助
1.7.6互联网资源
第2章向量
2.1标量、向量、数组与矩阵
2.1.1添加或删除向量元素
2.1.2获取向量长度
2.1.3作为向量的矩阵和数组
2.2声明
2.3循环补齐
2.4常用的向量运算
2.4.1向量运算和逻辑运算
2.4.2向量索引
2.4.3用:运算符创建向量
2.4.4使用seq()创建向量
2.4.5使用rep()重复向量常数
2.5使用all()和any()
2.5.1扩展案例:寻找连续出现1的游程
2.5.2扩展案例:预测离散值时间序列
2.6向量化运算符
2.6.1向量输入,向量输出
2.6.2向量输入,矩阵输出
2.7NA与NULL值
2.7.1NA的使用
2.7.2NULL的使用
2.8筛选
2.8.1生成筛选索引
2.8.2使用subset()函数筛选
2.8.3选择函数which()
2.9向量化的ifelse()函数
2.9.1扩展案例:度量相关性
2.9.2扩展案例:对鲍鱼数据集重新编码
2.10测试向量相等
2.11向量元素的名称
2.12关于c()的更多内容
第3章矩阵和数组
3.1创建矩阵
3.2一般矩阵运算
3.2.1线性代数运算
3.2.2矩阵索引
3.2.3扩展案例:图像操作
3.2.4矩阵元素筛选
3.2.5扩展案例:生成协方差矩阵
3.3对矩阵的行和列调用函数
3.3.1使用apply()函数
3.3.2扩展案例:寻找异常值
3.4增加或删除矩阵的行或列
3.4.1改变矩阵的大小
3.4.2扩展案例:找到图中距离最近的一对端点
3.5向量与矩阵的差异
3.6避免意外降维
3.7矩阵的行和列的命名问题
3.8高维数组
第4章列表
4.1创建列表
4.2列表的常规操作
4.2.1列表索引
4.2.2增加或删除列表元素
4.2.3获取列表长度
4.2.4扩展案例:文本词汇索引
4.3访问列表元素和值
4.4在列表上使用apply系列函数
4.4.1lapply()和sapply()的使用
4.4.2扩展案例:文本词汇索引(续)
4.4.3扩展案例:鲍鱼数据
4.5递归型列表
第5章数据框
5.1创建数据框
5.1.1访问数据框
5.1.2扩展案例:考试成绩的回归分析(续)
5.2其他矩阵式操作
5.2.1提取子数据框
5.2.2缺失值的处理
5.2.3使用rbind()和cbind()等函数
5.2.4使用apply()
5.2.5扩展案例:工资研究
5.3合并数据框
5.4应用于数据框的函数
5.4.1在数据框上应用lapply()和sapply()函数
5.4.2扩展案例:应用Logistic模型
5.4.3扩展案例:学习中文方言的辅助工具
第6章因子和表
6.1因子与水平
6.2因子的常用函数
6.2.1tapply函数
6.2.2split()函数
6.2.3by()函数
6.3表的操作
6.3.1表中有关矩阵和类似数组的操作
6.3.2扩展案例:提取子表
6.3.3扩展案例:在表中寻找频数最大的单元格
6.4其他与因子和表有关的函数
6.4.1aggregate()函数
6.4.2cut()函数
第7章R语言编程结构
7.1控制语句
7.1.1循环
7.1.2对非向量集合的循环
7.1.3if-else结构
7.2算术和逻辑运算符及数值
7.3参数的默认值
7.4返回值
7.4.1决定是否显式调用return()
7.4.2返回复杂对象
7.5函数都是对象
7.6环境和变量作用域的问题
7.6.1顶层环境
7.6.2变量作用域的层次
7.6.3关于ls()的进一步讨论
7.6.4函数(几乎)没有副作用
7.6.5扩展案例:显示调用框的函数
7.7R语言中没有指针
7.8向上级层次进行写操作
7.8.1利用超赋值运算符对非局部变量进行写操作
7.8.2用assign()函数对非局部变量进行写操作
7.8.3扩展案例:用R语言实现离散事件仿真
7.8.4什么时候使用全局变量
7.8.5闭包
7.9递归
7.9.1Quicksort的具体实现
7.9.2拓展举例:二叉查找树
7.10置换函数
7.10.1什么是置换函数
7.10.2扩展案例:可记录元素修改次数的向量类
7.11写函数代码的工具
7.11.1文本编辑器和集成开发环境
7.11.2edit()函数
7.12创建自己的二元运算符
7.13匿名函数
第8章数学运算与模拟
8.1数学函数
8.1.1扩展例子:计算概率
8.1.2累积和与累积乘积
8.1.3最小值和最大值
8.1.4微积分
8.2统计分布函数
8.3排序
8.4向量和矩阵的线性代数运算
8.4.1扩展示例:向量叉积
8.4.2扩展示例:确定马尔科夫链的平稳分布
8.5集合运算
8.6用R做模拟
8.6.1内置的随机变量发生器
8.6.2重复运行时获得相同的随机数流
8.6.3扩展案例:组合的模拟
第9章面向对象的编程
9.1S3类
9.1.1S3泛型函数
9.1.2实例:线性模型函数lm()中的OOP
9.1.3寻找泛型函数的实现方法
9.1.4编写S3类
9.1.5使用继承
9.1.6扩展示例:用于存储上三角矩阵的类
9.1.7扩展示例:多项式回归程序
9.2S4类
9.2.1编写S4类
9.2.2在S4类上实现泛型函数
9.3S3类和S4类的对比
9.4对象的管理
9.4.1用ls()函数列出所有对象
9.4.2用rm()函数删除特定对象
9.4.3用save()函数保存对象集合
9.4.4查看对象内部结构
9.4.5exists()函数
第10章输入与输出
10.1连接键盘与显示器
10.1.1使用scan()函数
10.1.2使用readline()函数
10.1.3输出到显示器
10.2读写文件
10.2.1从文件中读取数据框或矩阵
10.2.2读取文本文件
10.2.3连接的介绍
10.2.4扩展案例:读取PUMS普查数据
10.2.5通过URL在远程计算机上访问文件
10.2.6写文件
10.2.7获取文件和目录信息
10.2.8扩展案例:多个文件内容的和
10.3访问互联网
10.3.1TCP/IP概述
10.3.2R中的socket
10.3.3扩展案例:实现R的并行计算
第11章字符串操作
11.1字符串操作函数概述
11.1.1grep()
11.1.2nchar()
11.1.3paste()
11.1.4sprintf()
11.1.5substr()
11.1.6strsplit()
11.1.7regexpr()
11.1.8gregexpr()
11.2正则表达式
11.2.1扩展案例:检测文件名的后缀
11.2.2扩展案例:生成文件名
11.3在调试工具edtdbg中使用字符串工具
第12章绘图
12.1创建图形
12.1.1基础图形系统的核心:plot()函数
12.1.2添加线条:abline()函数
12.1.3在保持现有图形的基础上新增一个绘图窗口
12.1.4扩展案例:在一张图中绘制两条密度曲线
12.1.5扩展案例:进一步考察多项式回归
12.1.6添加点:points()函数
12.1.7添加图例:legend()函数
12.1.8添加文字:text()函数
12.1.9精确定位:locator()函数
12.1.10保存图形
12.2定制图形
12.2.1改变字符大小:cex选项
12.2.2改变坐标轴的范围:xlim和ylim选项
12.2.3添加多边形:polygon()函数
12.2.4平滑散点:lowess()和loess()函数
12.2.5绘制具有显式表达式的函数
12.2.6扩展案例:放大曲线的一部分
12.3将图形保存到文件
12.3.1R图形设备
12.3.2保存已显示的图形
12.3.3关闭R图形设备
12.4创建三维图形
第13章调试
13.1调试的基本原则
13.1.1调试的本质:确认原则
13.1.2从小处着手
13.1.3模块化的、自顶向下的调试风格
13.1.4反漏洞
13.2为什么要使用调试工具
13.3使用R的调试工具
13.3.1利用debug()和browser()函数进行逐步调试
13.3.2使用浏览器命令
13.3.3设置断点
13.3.4使用trace()函数进行追踪
13.3.5使用traceback()和debugger()函数对崩溃的程序进行检查
13.3.6扩展案例:两个完整的调试会话
13.4更方便的调试工具
13.5在调试模拟数据的代码时请确保一致性
13.6语法和运行时错误
13.7在R上运行GDB
第14章性能提升:速度和内存
14.1编写快速的R代码
14.2可怕的for循环
14.2.1用向量化提升速度
14.2.2扩展案例:在蒙特卡罗模拟中获得更快的速度
14.2.3扩展案例:生成幂次矩阵
14.3函数式编程和内存问题
14.3.1向量赋值问题
14.3.2改变时拷贝
14.3.3扩展案例:避免内存拷贝
14.4利用Rprof()来寻找代码的瓶颈
14.4.1利用Rprof()来进行监视
14.4.2Rprof()的工作原理
14.5字节码编译
14.6内存无法装下数据怎么办
14.6.1分块
14.6.2利用R软件包来进行内存管理
第15章R与其他语言的接口
15.1编写能被R调用的C/C++函数
15.1.1R与C/C++交互的预备知识
15.1.2例子:提取方阵的次对角线元素
15.1.3编译和运行程序
15.1.4调试R/C程序
15.1.5扩展案例:预测离散取值的时间序列
15.2从Python调用R
15.2.1安装RPy
15.2.2RPy语法
第16章R语言并行计算
16.1共同外链问题
16.2snow包简介
16.2.1运行snow代码
16.2.2分析snow代码
16.2.3可以获得多少倍的加速
16.2.4扩展案例:K均值聚类
16.3借助于C
16.3.1利用多核机器
16.3.2扩展案例:利用OpenMP解决共同外链问题
16.3.3运行OpenMP代码
16.3.4OpenMP代码分析
16.3.5其他OpenMP指令
16.3.6GPU编程
16.4普遍的性能考虑
16.4.1开销的来源
16.4.2简单并行程序,以及那些不简单的
16.4.3静态和动态任务分配
16.4.4软件炼金术:将一般的问题转化为简单并行问题
16.5调试R语言并行计算的代码
附录A安装R
附录B安装和使用包

前言/序言

  致谢
  《华章科技:R语言编程艺术》很大程度上得益于很多人的帮助和支持。
  首先,也是最重要的,我必须感谢技术审稿人HadleyWickham先生,他的成名作是ggplot2和plyr这两个包。我曾向NoStarch出版社推荐过Hadley,因为除了这两个包之外,他开发的其他包在CRAN(R用户贡献的代码库)上也备受欢迎,可说是经验丰富。正如我期待的那样,Hadley的很多评论为《华章科技:R语言编程艺术》增色不少,尤其是他对某些代码示例的评论,通常他都这样开头:“我在想,如果你这么写会怎么样……”。有时这些评论会导致原本只带有一两个版本代码的例子变得要用两三种甚至更多种不同方式来实现编程目的,这样可以比较不同方法的优点和缺点,我相信读者会因此受到启发。
  非常感谢JimPorzak,他是湾区R用户小组(BayAreauseRGroup,BARUG的联合创始人,在我写这《华章科技:R语言编程艺术》时他曾多次鼓励我。说起BARUG,我必须感谢Jim和另一位联合创始人MikeDriscoll,感谢他们创建了这个充满活力而又富有启发性的论坛。在BARUG,介绍R语言精妙应用的演讲者们经常让我感觉写这《华章科技:R语言编程艺术》是个很有价值的项目。BARUG也得益于RevolutionAnalytics公司的资助以及该公司员工DavidSmith和JoeRickert付出的时间、精力,以及奇妙的想法。
  JayEmerson和MikeKane,CRAN上备受赞誉的bigmemory包的作者,他们通读了第16章的早期文稿,并给出了极富价值的评论。
  JohnChambers(S语言的缔造者,而S语言是R语言的前身)和MartinMorgan提供了关于R内核的建议,这对我在第14章讨论R的性能问题有很大帮助。
  7.8.4节涉及了一个在编程社区很有争议的主题——全局变量的使用。为了有一个更广阔的视角,我征求了几位专家的意见,特别是R核心小组的成员ThomasLumley和加州大学戴维斯分校计算机科学学院的SeanDavis。当然,这并不意味着他们认可了我在这一节的观点,不过他们的评论非常有用。
  在本项目的前期,我写了份非常粗糙的(也是非常不完整的)草稿以供公众评论,后来RamonDiaz-Uriarte、BarbaraF。LaScala、JasonLiao以及我的老朋友MikeHannon给了我很有帮助的反馈。我的女儿Laura,一名工科学生,阅读了前面部分章节并给出了一些建议,使得《华章科技:R语言编程艺术》得以完善。
  我自己的CRAN项目以及与R相关的研究(有些成为了《华章科技:R语言编程艺术》的示例)得益于许多人的建议、反馈和(或)鼓励,特别是MarkBravington、StephenEglen、DirkEddelbuett、JayEmerson、MikeKane、GaryKing、DuncanMurdoch和JoeRickert。
  R核心小组成员DuncanTempleLang和我在同一个机构——加州大学戴维斯分校(UCD)。尽管我们在不同的系,以前也没有太多接触,但是这《华章科技:R语言编程艺术》也得益于他在这个校园。他帮助UCD创造了一种广泛认可R的文化氛围,这让我能够很容易地向系里证明我用大量的时间写这《华章科技:R语言编程艺术》是有价值的。
  这《华章科技:R语言编程艺术》是我跟NoStarch出版社合作的第二个项目。当我决定写这《华章科技:R语言编程艺术》的时候,很自然地想到去找NoStarch出版社,因为我喜欢他们产品的这种不拘形式的风格、高度实用性和可接受的价格。感谢BillPollock同意这个项目,感谢编辑人员KeithFancher和AlisonLaw以及自由编辑MarilynSmith。
  最后,但非常重要的是,我要感谢两位美丽、聪明、有趣的女人——我的妻子Gamis和前面提到的Laura,每次她们问我为什么如此埋头工作,我说“我正在写这本R书”,她们都会欣然接受。




其他推荐