基本信息
- 原书名:The Art of R Programming: A Tour of Statistical Software Design
- 原出版社: No Starch Press

编辑推荐
著名计算机科学家兼统计学家撰写,Amazon五星级桶销书,R语言领域公认经典著作。
从纯编程角度系统讲解日语言的数据结构、编程结构、语法、TCP/IP网络编程、并行计算、代码调试、程序性能优化、编程
技巧以及日语言与其他语言的接口。
内容简介
计算机书籍
《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语言的并行计算等。
作译者
目录
译者序
前 言
致 谢
第1章 快速入门 1
1.1 怎样运行R 1
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
译者序
一直以来,国内外关于R语言的著作都是以统计学专业的视角来介绍R语言的,对R语言本身的特性讲解得并不详尽,而软件自带的官方文档又显得过于技术,不那么亲民。另一方面,很多接触R的朋友都来自非计算机专业,没有接受过编程训练,他们使用R的时候,编写出来的代码通常只能算是一条条命令的集合,面对更复杂的问题,常常束手无策。记得在某届R语言大会上,有位SAS阵营的朋友说,他看到演讲者所展示的代码里只有函数调用,没有编程的东西,所以他觉得R不能算一种编程语言。其实,他错了,此时你手里这本书,覆盖了其他大部分R语言图书没有涉及的编程主题。这本书就如同R语言的九阳神功秘籍,当神功练成,任督二脉一旦打通,再学习针对某一领域应用的函数或包就如庖丁解牛一般。顺便提一下,据微博上的小道消息,前面提到的那位朋友最近也开始学R了。
本书的特点表现在以下几个方面:
第一,对读者的统计学知识和编程水平要求并不高。与很多R语言书籍不同,这本书并不需要很深的统计学功底,它从纯语言的角度入手来讲解R。对于有一定编程经验却没什么统计学背景的人来说,读这本书会比较顺畅,读者就可以重点关注R语言的特性在数据分析方面的应用。在有的地方,作者也会提醒那些有其他语言编程经验的人应该注意R语言有什么不同之处。而对于没有编程经验又想使用R做数据分析的人来说,这本书也是学习编程的绝佳教材。
第二,专注于R语言编程。作者没有把这本书定位为菜谱式的手册,也不像有些R语言图书那样介绍完统计学某方面应用之后简单地把R语言代码摆出来。翻开这本书的目录,你几乎看不到统计学的术语。本书系统介绍了R语言的各种数据结构和编程结构、面向对象编程方法、socket网络编程、并行计算、代码调试、程序性能提升以及R语言与其他语言的接口等主题。书中也提到了不少编程的小技巧,这都是作者多年编程经验的总结。
第三,丰富的案例分析。作者Matloff教授是位计算机科学家,同时也是位统计学家,有多年的教学经验,也做过统计学方法论的顾问。除了正文中的例子之外,本书还有44个扩展案例,很多案例源自作者亲身参与过的咨询项目。虽然本书没有讲解任何统计模型,但是扩展案例都是和数据分析相关的,比如对鲍鱼数据的重新编码(第2章)、寻找异常值(第3章)、文本词汇索引(第4章)、学习中文方言的辅助工具(第5章)等。通过学习这些案例,读者不仅能学到R语言的每种概念如何运作,也会学到如何把这些概念组合到一起成为有用的程序。比如第10章介绍了socket网络编程之后,就用一个扩展案例讲解如何用socket实现并行计算,这为第16章详细讲解并行计算做好了铺垫。在很多案例里,作者讨论了好几种设计方案,并比较了这几种方案的不同之处,以回答“为什么这样做”,这对于缺少编程经验的人来说,是非常好的安排。
本书第1章简要介绍了R语言的几种数据结构和编程基础,其余章节可分为三大部分。
第一部分(第2~6章)详细介绍R的几种主要的数据结构:向量、矩阵、列表、数据框和因子等。对很多人来说,R复杂多变的数据结构真的是一只拦路虎。而本书从最简单的向量开始,一步一步引导读者认识并掌握各种数据结构。
第二部分(第7~13章)涉及编程方面: 编程结构和面向对象特性、输入/输出、字符串处理以及绘图。值得一提的是第13章,这章主要讲解的是R语言的调试。很多朋友在实际工作中有这样的经历,你可能用了一个小时就写好代码,却用了一天的时间来调试。可是到目前为止还没有在其他图书上看到与R语言调试相关的内容,甚至也很少见到关于其他编程语言调试的图书。本书刚好填补了这方面的空白。如果读者仔细读完第13章,并实践其中的调试技巧,一定能事半功倍,也就能少熬点儿夜,有延长寿命的功效。本书的作者同时也著有《调试的艺术》(The Art of Debugging),相信他在R语言调试方面的功力也是相当深厚的。
第三部分(第14~16章)介绍的是更高级的内容,比如执行速度和性能的提升(第14章)、R语言与C/C++或Python混合编程(第15章)以及R语言并行计算(第16章) ,虽然最后一部分属于编程的高级内容,但如果读者从前往后一直学下来,随着能力的提高,也是可以读懂的。
本人从2007年开始接触R语言,那时候市面上几乎没有R语言方面的书籍。当时我关于R语言的所有信息几乎都是来自统计之都(http://cos.name)和谢益辉的博客(http://yihui.name)。2008年冬天,统计之都成功举办了“第一届中国R语言会议”,来自各地的R语言用户们齐聚一堂,交流心得。从那以后,每年的R语言会议都会在北京和上海举办。这几年来,统计之都的队伍也逐渐壮大,比如本书的其他三位主要译者:邱怡轩、潘岚锋和熊熹,当年他们参加R语言会议的时候还是人大统计学院大一、大二的学生,后来也成为R语言社区的领军人物。去年我们接到本书的翻译任务时,他们三人分别收到了美国普度大学、爱荷华州立大学以及明尼苏达大学的录取通知,现在已经在美国留学深造。希望有越来越多的人加入统计之都的大家庭,和大家一起成长,为中国统计事业的发展尽自己的一份力。
在翻译过程中,几位译者力求忠实于原文,但纠正了原书的几处错误,同时也兼顾中文表达的流畅,不过译文中可能仍有不当之处,欢迎读者予以指正。
除了本人以及前面提到的三位译者之外,统计之都的三位老朋友林宇、严紫丹和程豪也参与了本书部分章节的校审和初稿翻译,在此表示感谢。全书译文最后由本人统稿,如有错误之处,均由本人承担。
也感谢机械工业出版社的吴怡编辑,她给予了我们细心的帮助。
统计之都的图书出版栏目(网址是http://cos.name/books/ )有本书的页面,读者可以在这里下载本书的数据和代码,也可以留言提问。
译者简介
本书三位主要译者都是统计之都(http://cos.name)的管理员、中国R语言会议理事会成员。
陈堰平毕业于中国人民大学统计学院,现任国家金融信息中心数据中心研发部负责人,从事指数编制、指数化投资、金融衍生品方面的工作,对金融数据分析有多年的研究,博客网址为http://yanping.me。邱怡轩是普度大学统计系在读博士研究生,开发过rarpark、R2SWF、Layer等R语言程序包,博客网址为http://yixuan.cos.name/。潘岚峰是爱荷华州立大学统计系在读博士研究生,开发过R语言程序包bignmf。
陈堰平
2013年3月于新华通讯社第三工作区
前言
由于R是免费的,而且有更多的人贡献自己的代码,R语言变得比S和S-Plus更受欢迎。R有时亦称为GNU S,以反映它的开源属性。(GNU项目是开源软件的一个重要集合。)
为什么在统计工作中用R
粤语有个词“又便又靓”,意思是“物美价廉”,R语言就是这样一种工具,为什么还要用别的呢?
R语言有许多优点:
它是广受关注的统计语言S在公众领域的实现,而且R/S已经是专业统计学家的实际标准语言。
在绝大多数情况下,它的功能不亚于甚至优于商业软件,比如它有大量的函数、良好的可编程性、强大的绘图功能,等等。
在Windows、Mac、Linux等操作系统上都有相应的版本。
除了提供统计操作以外,R还是门通用编程语言,所以你可以用它做自动分析、创建新的函数来拓展语言的现有功能。
它结合了面向对象语言和函数式编程语言的特性。
系统在两次会话之间可以保存数据集,所以不需要每次重新加载数据集。R还可以保存历史命令。
因为R是开源软件,所以很容易从用户社区获得帮助。另外,用户们贡献了大量的新函数,其中很多用户都是杰出的统计学家。
我必须事先提醒你,最好直接在终端窗口输入命令并提交给R,而不是在GUI里用鼠标点击菜单,并且大多数R用户都不用GUI。这并不是说R不能图形化操作。相反,它有很多工具可以生成实用、美观的图形,不过这些工具是用在系统输出方面,比如画图,而不是用在输入方面。
如果你离不开GUI,则可以选用一种免费的GUI,它们是为R开发的,比如下面几种开源的或免费的工具:
RStudio,http://www.rstudio.org/
StatET,http://www.walware.de/goto/statet/
ESS (Emacs Speaks Statistics),http://ess.r-project.org/
R Commander:John Fox,“The R Commander: A Basic-Statistics Graphical Interface to R,” Journal of Statistical Software 14, no. 9 (2005):1–42.
JGR (Java GUI for R),http://cran.r-project.org/web/packages/JGR/index.html
前三种软件,RStudio、StatET和 ESS属于集成开发环境(Integrated Development Environments, IDE),更多地是为编程设计的。StatET和ESS则为R程序员分别提供了针对著名的Eclipse 和Emacs环境的IDE。
书摘
快速入门
如前言所述,R是一种针对统计分析和数据科学的功能全面的开源统计语言。它在商业、工业、政府部门、医药和科研等涉及数据分析的领域都有广泛的应用。
本章将给出R的简单介绍——如何调用、能做什么以及使用什么文件。这里只介绍你在理解后面几章的例子时所需的基础知识,具体的细节将会在后面的章节中加以介绍。
如果你的公司或大学允许,R可能已经安装在你的系统中。如果还没安装,请参考附录A中的安装指南。
1.1怎样运行R
R可以在两种模式下运行:交互模式和批处理模式。常用的是交互模式。在这种模式下,你键入命令,R将显示结果,然后你再键入新的命令,如此反复进行操作。而批处理模式不需要与用户进行互动。这对于生产工作是非常有帮助的,比如一个程序必须定期重复运行,如每天运行一次,用批处理模式则可以让处理过程自动运行。
1.1.1交互模式
在Linux或Mac的系统中,只需在终端窗口的命令行中键入R,就可以开始一个R会话。在Windows系统下,点击R图标来启动R。
启动后显示的是欢迎语,以及R提示符,也就是>符号。屏幕的显示内容如下:
现在就可以开始执行R命令了。这时候显示的窗口叫做R控制台。
举个简单例子,考虑一个标准正态分布,其均值为0且方差为1。如果随机变量X服从这个标准正态分布,那么它的取值将以0为中心,或正或负,平均值为0。现在要生成一个新的随机变量Y=|X|。因为我们已经取了绝对值,Y的值将不会以0为中心,并且Y的均值也将是正值。
下面来计算Y的均值。我们的方法基于模拟N(0,1)分布随机变量的取值:
这行代码将会生成100个随机变量,计算它们的绝对值,然后计算它们绝对值的均值。
标签[1]表示这行的第一项是输出结果的第一项。在这个例子中,输出结果只有一行(且只有一项),所以标签[1]显得有点多余。但是当输出结果有很多项会占据很多行时,这种标签会很有帮助。例如,输出结果有两行,且每行最多有6项,则第二行将会以标签[7]开头。
在这里,输出结果有10个数值,举例来说,第二行的标签[7]可以让你快速判断出0.687701是输出结果的第8项。
也可以把R的命令保存在文件里。通常,R代码文件都会有后缀.R或者.r。如果你创建一个名为z.R的文档,可以键入下面的命令来执行该文件中的代码:
1.1.2批处理模式
有时候自动处理R会话能带来便利。例如,你可能希望运行一个用来绘图的R脚本,而不需要你亲自启动R来执行脚本,这时就要用批处理模式运行R。
举个例子,文件z.R中是绘图的代码,内容如下: