R软件是进行统计分析、绘图和统计编程的强大工具。现在成千上万的人用它来进行日常的重要统计分析。R是一个自由、开源的软件系统,它是许多聪明、勤奋工作的人的集体工作成果。R有超过10 000个软件包插件,是其他商业统计软件包的强劲竞争对手。
但是,刚开始使用R软件时可能感到无从下手。对许多人来说,即便是一些基本的任务,R的实现也不是很明显。当了解了R的使用方法后,简单的问题自然能得心应手地解决,但学习“如何”使用R的过程有时会让人感到发狂。
本书介绍了如何使用R软件的一些方法,其中每一个方法对应解决某个特定的问题。介绍这些方法的途径为:首先给出待解决的问题,然后给出解决方案的简单介绍,之后再给出对解决方案的讨论,深入剖析解决方案,给出该方案的原理。我们知道这些方法实用,也知道这些方法可行,因为我们也在使用它们。
这些方法所涉及的范围较为广泛。首先,从基本的任务开始介绍,然后介绍数据的输入和输出、基本统计、图形以及线性回归。与R有关的工作都或多或少地涉及本书介绍的方法。
通过学习本书,初学者能快速了解R并上手。如果你对R软件有一定的了解,那么本书也能帮助你巩固已学的知识,拓宽你的思维(例如,“下一次我应该怎么使用Kolmogorov-Smirnov检验”)。
从严格意义上来说,本书并不是一本关于R软件的教程,但你将会从中学习到许多R软件的应用技巧。本书也不是一本关于R的参考手册,但它确实包含了许多实用的内容。本书更不是一个R软件的编程指南,但书中很多方法都可以应用到R的编程脚本中。
最后,本书不是统计学理论的参考书。本书假设读者对统计理论和方法有一定的了解,想知道的是如何在R软件中实现。
方法
本书介绍的大部分方法,都是由一两个R函数或命令来解决某一特定问题。需要注意的是,书中不会对某一函数的全部能力进行详细解释,而是仅介绍那些与需要解决的问题有关的函数能力。R软件中几乎所有的函数所具备的能力都远远不止本书中所介绍的,其中有的函数具有更强大的能力。因此强烈建议读者阅读这些函数的帮助页面,你可能会从中得到不少收获。
每个方法都为读者提供了解决某个问题的一条途径。当然对于每个问题有可能存在多个正确的解决方案。在这种情况下,我们一般会选择最为简单的方法。对于书中给出的任何问题,你自己或许可以找到其他一些解决方案。本书着重介绍解决问题的方法,类似“菜谱”书,而不是R软件的大全书。
尤其是,R软件有大量的添加包,这几千个R添加包都可以从网络下载。这些包中含有许多替代算法和统计方法。本书侧重于R基础发布版所带的核心功能,以及几个重要的放在一起统称为tidyverse的添加包。
tidyverse最简洁的定义来自Hadley Wickham—tidyverse的创始人和它的核心维护者之一:
“tidyverse是一组协调工作的添加包,它们共享通用数据表达式和API设计。tidyverse包旨在使其易于通过单个命令安装和加载核心包。了解tidyverse中的所有添加包以及它们如何组合在一起的最佳方式是阅读R for Data Science(http://r4ds.had.co.nz)一书。”
对术语的说明
每个方法旨在迅速地解决问题,而非长篇大论地进行论述。因此我们有时候会采用一些术语来简化相关内容的解释,这些术语有时候可能不精确,但是正确的。比如,术语泛型函数。我们把函数print(x)和plot(x)称为泛型函数,原因是它们能适当地处理多种输入参数x。计算机科学家可能会质疑这一术语,因为严格来说这些都不是简单的“函数”,它们是多态方法并且动态调度。但是,如果我们仔细地精确定义所有这样的技术细节,那么关键的解决方案将会埋没于这些细枝末节的技术问题中。所以为了便于阅读,我们就将它们称为函数。
另一个例子是统计学中的假设检验术语。若使用概率论的严格定义,就会使读者难以清晰理解这些检验的实际应用,所以我们以更通俗的语言来描述各个统计检验。更多有关假设检验方法的细节,请查看第9章的简介部分。
我们的目标是用通俗易懂而非严格的正式语言,让R软件能被更多的读者所理解和接受。因此希望各个领域的专家对于我们所给出的某些并不严谨的术语与定义予以谅解。
软件及平台说明
虽然R软件时常进行有计划的版本更新,但其语言定义和核心实现是稳定的。本书所介绍的方法适用于基础发布版的任何最新版本。
有些方法对于操作平台有特殊的要求,我们会在文中对其加以标注,这些方法大多数是一些软件本身的问题,如程序的安装和配置。据我们所知,书中的所有其他方法在R的三个主要平台(即Windows、macOS和Linux/Unix)上都能运行。
. 其他资源
如果你想进行更深入的阅读,下面是一些进一步阅读的建议。
网络
R项目网站(http://www.r-project.org)汇集了所有R软件的相关资源,从中可以下载R程序代码、R添加包、文档、源代码等。
除了R项目网站以外,我们建议使用一个针对R软件的搜索引擎,比如Sasha Goodman开发的RSeek搜索引擎(http://rseek.org),也可以使用谷歌这样的通用搜索引擎,但在搜索“R”关键词时可能会得到许多无关的搜索结果。更多有关网络搜索的细节参见1.11节。
浏览博客也是一种学习R软件和掌握R最新动态的有效方式。网络中有许多这样的博客,我们推荐其中两个:Tal Galili创建的R-bloggers(http://www.r-bloggers.com/)和PlanetR(http://planetr.stderr.org)。通过订阅这些网站,你可以得到许多相关网站上有趣且实用的文章的通知。
R软件参考书籍
市面上有许多学习和应用R软件的书籍。下面列出一些我们认为有用的R软件教程。R项目网站收录了大量与R相关的书目(http://www.r-project.org/doc/bib/R-books.html)。
我们所推荐的书目有:
Hadley Wickham和Garrett Grolemund所著的R for Data Science(http://oreil.ly/2IIWxCs )(O’Reilly),该书很好地介绍了tidyverse软件包,特别是在数据分析和统计中对该添加包的使用。该书也可以在线获得(http://r4ds.had.co.nz )。
由Winston Chang撰写的R Graphics Cookbook, 2nd ed.(https://oreil.ly/2IhNUQj)(O’Reilly)对于创建图形是不可或缺的。Hadley Wickham撰写的ggplot2: Elegant Graphics for Data Analysis(Springer),是我们在本书中使用的ggplot2的权威参考。
在R中做任何图形工作的人都需要参考Paul Murrell所著的R Graphics(Chapman & Hall/CRC)。
O’Reilly公司出版的R in a Nutshell(https://oreil.ly/2wUtwyf)的作者是Joseph Adler,该书可以作为读者手边的R软件的使用参考,它比本书涵盖了更多的内容。
有关R编程的新书层出不穷。我们推荐Garrett Grolemund的Hands On Programming with R(https://oreil.ly/2wWPHUd)(O’Reilly)或者Normal Matloff的The Art of R Programming(No Starch Press)。Hadley Wickham所著的Advanced R(Chapman & Hall/CRC)既有印刷版的,也可以免费在线获得(http://adv-r.had.co.nz/),该书深入研究了高级R主题。Colin Gillespie和Robin Lovelace所著的Efficient R Programming(https://oreil.ly/2wXxK80)(O’Reilly)是另一本学习更深层R编程概念的优秀指南。
William Venables和Brian Ripley所著的Modern Applied Statistics with S, 4th ed. (Springer)使用S软件来说明一些高级的统计技术。该书所涉及的函数和数据集可通过R添加包MASS获得,该添加包被包含在R软件标准发布版中。
极客可以参照R核心团队定义的R Language Definitions(http://bit.ly/2FaBgAz)。这是一项正在进行的工作,但它可以回答有关R编程语言的许多详细问题。
统计学书籍
由John Verzani编写的Using R for Introductory Statistics(Chapman & Hall/CRC),是一本优秀的统计学教材。它将统计学与R软件结合起来,讲述应用统计方法的一些必要的计算机技巧。
在你学习的过程中需要一本好的统计学参考书作为指导,它可以帮助你准确地理解在R中进行的统计检验。目前市面上有许多优秀的统计学参考书,与我们所推荐的书难分伯仲,你可以任意选择。
越来越多的统计学作者选择用R软件来讲述相应的统计方法。对于某一特定专业领域的工作者,可以在R项目网站收录的书目中寻找所需要的书籍。
本书约定
在本书中使用以下排版方式:
斜体(Italic)
此类字体表示网址、电子邮件地址、文件名、文件扩展名等。
等宽字体(Constant width)
此类字体用于程序清单,以及正文中出现的程序元素(如变量名或函数名、数据库名、数据类型、环境变量、程序语句、关键字等)。
等宽粗体(Constant width bold)
此类字体表示需要读者输入的指令或其他文本。
等宽斜体(Constant width italic)
此类字体表示用读者提供的值或者上下文确定的值来替换的文本。
提示或建议。
一般性说明。
要特别注意的内容。
示例代码
可以从http://rc2e.com下载补充材料(示例代码、练习等)。与本书内容相关的Twitter账户是@R_cookbook(https://twitter.com/R_cookbook)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的配套CD-ROM则需要O’Reilly出版社的许可。引用本书的示例代码来回答一个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,不用注明出处。注明出处的形式包含标题、作者、出版社和ISBN,例如:
R Cookbook, 2nd ed.,作者J. D. Long 和 Paul Teetor,由O’Reilly出版,书号978-1-492-04068-2
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。
O’Reilly在线学习平台(O’Reilly Online Learning)
近40年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和创新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量教材和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至bookquestions@oreilly.com。
本书配套网站http://bit.ly/RCookbook_2e上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://www.oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia
致谢
我们要对整个R社区,尤其是R软件的核心开发团队表示衷心感谢。他们的无私付出对世界统计学的贡献巨大。R Studio社区讨论的参与者围绕“如何解释许多事情”的研讨会提供了很多帮助。R Studio的员工和领导在很多方面都给予了支持,感谢他们对R社区的回馈。
我们要感谢本书的技术审校者David Curran、Justin Shea和MAJ Dusty Turner,他们的反馈对于提高本书的质量、准确性和实用性至关重要。我们的编辑Melissa Potter和Rachel Monaghan提供了超乎想象的帮助,他们使我们避免传播错误的内容。感谢我们的制作编辑Kristen Brown,她的速度以及对Markdown和Git的熟练程度令所有技术作者羡慕不已。
Paul要感谢他的家人在本书创作过程中给予的支持和耐心。
J. D.所有清晨和周末都在笔记本电脑上写作本书,他感谢妻子Mary Beth和女儿Ada的耐心。