译者序
R是一种用于统计计算与做图的开源软件,同时也是一种编程语言,它广泛应用于企业和学术界的数据分析领域,正在成为最通用的语言之一。由于近几年数据挖掘、大数据等概念的走红,R也越来越多地被人关注。截至本文完成之日,CRAN上共有4383个包,涉及统计、化学、经济、生物、医学、心理、社会学等各个学科。不同类型的公司,比如Google、辉瑞、默克、美国银行、洲际酒店集团和壳牌公司都在使用它,同时以S语言环境为基础的R语言由于其鲜明的特色,一出现就受到了统计专业人士的青睐,成为国外大学里相当标准的统计软件。
一直以来,国内外关于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语言的所有信息几乎都是来自统计之都和谢益辉的博客。2008年冬天,统计之都成功举办了"第一届中国R语言会议",来自各地的R语言用户们齐聚一堂,交流心得。从那以后,每年的R语言会议都会在北京和上海举办。这几,年来,统计之都的队伍也逐渐壮大,比如本书的其他三位主要译者;邱怡轩、潘岚锋和能喜,当年他们参加R语言会议的时候还是人大统计学院大一、大二的学生,后来也成为R语言社区的领军人物。去年我们接到本书的翻译任务时,他们三人分别收到了美国普度大学、爱荷华州立大学以及明尼苏达大学的录取通知,现在已经在美国留学深造。希望有越来越多的人加入统计之都的大家庭,和大家一起成长,为中国统计事业的发展尽自己的一份力。
R是一种用于数据处理和统计分析的脚本语言,它受到由AT&T实验室开发的统计语言S的启发,且基本上兼容于S语言。S语言的名称代表统计学(statistics),用来纪念AT&T开发的另一门以一个字母命名的编程语言,这就是著名的C语言。后来一家小公司买下了S,给它添加了图形用户界面并命名为S-Plus。
由于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
·StatET
· ESS (Emacs Speaks Statistics)
· 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)
前三种软件,RStudio、StatET和 ESS属于集成开发环境(Integrated Development Environments,IDE),更多地是为编程设计的。StatET和ESS则为R程序员分别提供了针对著名的Eclipse 和Emacs环境的IDE。
在商业软件中,另一种IDE出自Revolution Analytics公司,一家提供R语言服务的公司。
因为R是一种编程语言而不是各种不相关联的命令汇总,你可以把几个命令组合起来使用,每条命令用前一条命令的输出作为输入。(Linux用户可能会认出∶这类似于用管道将 shell命令串联起来。)这种组合R函数的能力带来了巨大的灵活性,如果使用恰当,功能会非常强大。
下面是个简单的例子,请看这条命令∶
nrow(3ubset (x03, z == 1))
首先,subset()函数针对数据框x03提取出变量z(取值为1)的所有记录,得到一个新的数据框,再把这个新数据框代人nrow()函数。这个函数计算数据框的行数。这行命令的最终效果是给出原数据框中z=1的记录的个数。
之前提到过面向对象编程和函数式编程这两个术语。这两个主题会激起计算机科学家的兴趣,尽管它们对大多数读者来说可能有点陌生,但是它们跟任何使用R做统计编程的人都有关。下面概述这两个主题。
面向对象编程
面向对象的优点可以用例子来解释,例如回归模型。当你用SAS、SPSS等其他统计软件做回归分析时,你会在屏幕上看到一大堆的输出结果。与之相反,如果在R里调用回归函数lm(),函数会返回一个包含所有结果的对象,对象里含有回归系数的估计、估计值的标准差、残差等。接下来你可以用编程的方式挑选对象里需要的部分并提取出来。
你会看到通过R的方式可使编程变得更容易,部分因为它提供了访问数据的一致性。这种一致性源于R是多态的,即一个函数可以应用于不同类型的输入,函数在运行过程中会选择适当的方式来处理。这样的函数称为泛型函数。(如果你是C++程序员,肯定见过类似的概念虚函数。)
例如plot()函数,如果你把它应用到—列数上,会得到一幅简单的图。但是如果把它应用到某个回归分析的输出结果中,会得到关于回归分析多个方面的一整套图形。当然,你只能在R生成的对象上使用plot()函数。这样也好,这意味着用户需要记的命令更少了!
函数式编程
避免显式迭代是R语言的—个常见话题,这对于函数式编程语言来说是很典型的问题。你可以利用R的函数特性把迭代行为表达成隐式的,而不是用循环语句。这可以让代码执行起来更有效率,当R运行在大数据集上时运行时间会相差很大。正如你看到的,R语言函数式编程的属性有许多优点;·更清晰,更紧凑的代码。
●有潜力达到更快的执行速度。
●减少了调试的工作量,因为代码更简单。
●容易转化为并行编程。
本书的读者对象
许多人以特定的方式使用R——直方图、回归分析或者其他涉及统计运算的任务。不过本书针对的是那些希望用R开发软件的读者。本书的目标读者从专业软件开发人员,到只在大学修过编程课、为了完成特定任务而写R代码的人。(统计学知识一般不是必需的。)
以下几类人可能会从本书受益∶
·受雇于某个需要定期制作统计报告的机构,比如医院、政府机关等,为此需要开发专用程序。
·开发统计学方法论的学术研究人员,所研究的方法论要么是全新的,要么就是结合了现有的方法并将其整合到一起,这些需要编程来实现,让学术界里更多的人能够使用。
·在市场营销、诉讼支持、新闻、出版等领域工作,需要通过编码来制作复杂图形以实现数据可视化的专家。
·有软件开发经验,参与的项目涉及统计分析的专业程序员。
·学习统计计算课程的学生。
因此,本书不是R包中各种统计方法的纲要,其实本书更侧重于编程,覆盖了大部分R语言图书没有涉及的与编程相关的主题,我甚至是围绕编程主题展开论述的。下面是一些具体的例子∶
·"扩展案例"展示完整的、特定用途的函数,而不是针对某个数据集的独立代码片段。你可能发现其中有些函数对你平常用R语言进行工作很有帮助。通过学习这些案例,你不仅能学到R语言的基本功能如何运作,也会学到如何把它们组合成有用的程序。在很多案例里,我讨论了其他设计方案,以回答"为什么我们这样做?"。·内容上符合程序员的思维习惯。例如,在讨论数据框的时候,我不仅表明数据框是一种R的列表,也指出这一事实对编程的潜在影响。我在适当的时候加人R语言与其他语言的比较,为那些刚好了解其他语言的人提供参考。
·在任何语言里,调试对于编程都非常关键,而在其他大多数R语言书籍中却鲜有涉及。本书用了一章的篇幅来介绍调试技巧,用"扩展案例"方法真刀真枪地展示如何调试实际工作中的程序。
·如今,多核计算机甚至普及到普通家庭,图形处理单元(GPU)已经悄然在科学计算界引发了一场革命。越来越多的R应用涉及非常大量的计算,并行处理已经成为R程序员面临的主要课题。所以本书用一章的篇幅讨论这个主题,同样给出技术细节和扩展案例。
·本书单独用一章介绍如何利用R内部行为以及其他工具的优势来加速R代码。
·用一章来讨论R语言与其他语言(如C和Python)的接口,用扩展案例展示了应用方法,同时也介绍了调试的技巧。
如前言所述,R是一种针对统计分析和数据科学的功能全面的开源统计语言。它在商业、工业、政府部门、医药和科研等涉及数据分析的领域都有广泛的应用。
本章将给出R的简单介绍——如何调用、能做什么以及使用什么文件。这里 只介绍你在理解后面几章的例子时所需的基础知识,具体的细节将会在后面的章节中加以介绍。
如果你的公司或大学允许,R可能已经安装在你的系统中。如果还没安装,请参考附录A中的安装指南。
1.1 怎样运行R
R可以在两种模式下运行∶ 交互模式和批处理模式。常用的是交互模式。在这种模式下,你键入命令,R将显示结果,然后你再键入新的命令,如此反复进行操作。而批处理模式不需要与用户进行互动。这对于生产工作是非常有帮助的,比如—个程序必须定期重复运行,如每天运行一次,用批处理模式则可以让处理过程自动运行。
1.1.1 交互模式
在Linux或Mac的系统中,只需在终端窗口的命令行中键入R,就可以开始一个R会话。在Windows系统下,点击R图标来启动R。
启动后显示的是欢迎语,以及R提示符,也就是>符号。屏幕的显示内容如下∶
R version 2.10.0(2009-10-26) Copyright(C)2009 The R Foundation for Statistical Computing ISBIN 3-900051-07-0 Type'demo()'for some demos,'help()' for on-line help,or'help.start()'for an HTML bronser interface to help. Type 'q()' to quit R.
现在就可以开始执行R命令了。这时候显示的窗口叫做R控制台。
举个简单例子,考虑一个标准正态分布,其均值为0且方差为1。如果随机变量X服从这个标准正态分布,那么它的取值将以0为中心,或正或负,平均值为0。现在要生成一个新的随机变量Y=【X】。因为我们已经取了绝对值,Y的值将不会以0为中心,并且Y的均值也将是正值。
下面来计算Y的均值。我们的方法基于模拟N(0,1)分布随机变量的取值∶
> mean(abs(rnorm(100)))[1] 0.7194236
这行代码将会生成100个随机变量,计算它们的绝对值,然后计算它们绝对值的均值。标签【1】表示这行的第一项是输出结果的第一项。在这个例子中,输出结果只有一行(且只有一项),所以标签【1】显得有点多余。但是当输出结果有很多项会占据很多行时,这种标签会很有帮助。例如,输出结果有两行,且每行最多有6项,则第二行将会以标签【7】开头。
>rnorm(10) [1]-0.6427784-1.046696 -1.4020476 -0.6718250 -0.9590894-0.8684650[7]-0.5974668 0.6877001 1.3577618-2.2794378
在这里,输出结果有10个数值,举例来说,第二行的标签【7】可以让你快速判断出 0.687701是输出结果的第8项。
也可以把R的命令保存在文件里。通常,R代码文件都会有后缀.R或者.r。如果你创建一个名为z.R的文档,可以键入下面的命令来执行该文件中的代码∶
>source("Z.R")
1.1.2 批处理模式
有时候自动处理R会话能带来便利。例如,你可能希望运行一个用来绘图的R脚本,而不需要你亲自启动R来执行脚本,这时就要用批处理模式运行R。
举个例子,文件z.R中是绘图的代码,内容如下∶
pdf("xh.pdf")# set graphical output file hist(rnorm(100))# generate 100 N(0,1)variates and plot their histogram dev.off()# close the graphical output file
以#标记的部分是注释,它们会被R解释器忽略掉。注释的作用是以更易读的形式来提示代码的用途。
下面一步步讲解前面代码的作用∶
·调用pdf()函数告诉R我们想把创建的图形保存在PDF文件xh.pdf中。
·调用morm()函数(rnorm代表random normal)生成100个服从N(0,1)分布的随机变量。··'对这些随机变量调用hist()函数生成直方图。
·调用dev.off()函数关闭正在使用的图形"设备",也就是本例中的xh.pdf文件。这就是实际上把文件写入磁盘的机制。
我们可以自动运行上面的代码,而不用进入R的交互模式,只需要调用一条操作系统shell命令(例如通常在Linux系统中使用的$命令提示符)来调用R∶
$R CMD BATCH z.R
用PDF阅读器打开保存的文件,可看到直方图(这里展示的只是简单的不加修饰的直方图,R可以生成更加复杂的图形),这表明上面的代码已执行。
1.2 第一个R会话
用数字1、2、4生成一个简单的数据集(用R的说法就是"向量"),将其命名为x∶
>x <-c(1,2,4)
R语言的标准赋值运算符是<-。也可以用=,不过并不建议用它,因为在有些特殊的情况下它会失灵。注意,变量的类型并不是固定不变的。在这里,我们把一个向量赋值给x,也许之后会把其他类型的值赋给它。我们会在1.4节介绍向量和其他类型。
c表示"连接"(英文是concatenate)。在这里,我们把数字1、2、4连接起来。更精确地说,连接的是分别包含三个数字的三个一元向量。这是因为可以把任何数字看作一元向量。
接下来我们也可以这样做∶
>q<-c(x,x,8)
这样就把q赋值为(1,2,4,1,2,4,8)(没错,还包括了x的副本)。
我们来确认一下数据是不是真的在x中。要在屏幕上打印向量,只需直接键人它的名称。如果你在交互模式下键入某个变量名(或更一般的,某个表达式),R就会打印出变量的值(或表达式的值)。熟悉其他语言(比如Python)的程序员会觉得这个特性很熟悉。例如,输入下面的命令∶
>X[1]124
果然,x包含数字1、2、4。
向量的个别元素靠【 】来访问。下面来看看如何打印x的第三个元素;
> x[3][1] 4
正如在其他语言里一样,称选择器(这里的3)为索引(index)或者下标(subscript)。,这些概念与ALGOL家族的语言(比如C和C++)类似。值得注意的是,R向量的元素的索引(下标)是从1开始的,而非0。
【下载地址】
链接:https://pan.baidu.com/s/13SgEWL0aiU6yoHwg6iTWuw
提取码:wzwa
相关文章
这是一部关于商务分析的书,而不是关于统计的书。这本书将明确地关注图形用户接 口、技巧、秘诀、技术和快捷方式,并将精力集中于商务分析师在日常生
本书以大家熟知的数据挖掘建模工具R语言来展开,以解决某个应用的挖掘目标为前提,先介绍案例背景提出挖掘目标,再阐述分析方法与过程,最后完成模型
本书注重实用性,是一本全面而细致的 R 指南,高度概括了该软件和它的强大功能,展示了实用的统计示例。且对于难以用传统方法处理的读乱。
本书更侧重于编程,覆盖了大部分R语言图书没有涉及的与编程相关的主题,我甚至是围绕编程主题展开论述的。
本书重点讲解 R 的绘图系统,指导读者通过绘图系统实现数据可视化。书中提供了快速绘制高质量图形的 150多种技巧,每个技巧用来解决一个特定的
FlashFXP绿色版网盘下载,附激活教程 1841
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1609
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 1654
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 1740
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 1860
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64