R的极客理想——工具篇(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-22 14:52:35

点击下载

作者:张丹

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

R的极客理想——工具篇

R的极客理想——工具篇试读:

前言

为什么要写这本书

我是一名程序员,前后做了10年的程序开发工作。在这10年间,我从程序员一路做到架构师,经历了太多的系统和应用。我做过手机游戏,写过编程工具;做过大型Web应用系统,写过公司内部CRM;做过SOA的系统集成,写过基于Hadoop的大数据工具;做过外包,做过电商,做过团购,做过支付,做过SNS,也做过移动SNS。以前只用Java,然后开始用PHP……如同其他程序员一样,我一度陶醉于追求各种技术的创新,但始终有一个问题困扰着我,那就是如何才能够将我所掌握的技术转变成价值?这就好比我面对着一座金山,我拥有先进的技术,可以制作各种性能稳定、功能卓越的挖掘机器,但我不懂如何将矿石提纯,变成金子!每每看到别人利用我的技术挖掘出金子时,我只能满脸的羡慕,心中无限的不甘。

直到遇见R语言,我豁然开朗。R语言为我从另外一个角度开启了宝藏的大门,也让我对自己的职业重新思考、规划,最后坚定了我向统计、金融行业的转型。如果你也存在以上的问题,不如随着本书一起进入R语言的世界,领略R语言特有的魅力,通过对R语言的学习,重新认识大数据的价值,更深一步地提升个人价值。

随着我与统计、金融领域的朋友交流地逐步深入,我深刻地体会到,他们对R语言的实际使用也存在着很大的问题和困惑。比如,他们在某些实验室环境下,使用R语言可以很轻松、很顺利地实现预期效果,但是移植到真实环境下,面对浩瀚繁复的大数据,在使用R语言的过程中出现了很多问题。这就好比面对一座金山,他们掌握着先进的提纯技术,但他们所使用的挖掘、采集工具却还停留在石器时代!使用工具的落后,使他们要面对大量R语言之外的问题,这让他们应接不暇,甚至崩溃!有的人甚至因此认为,R语言只是一种实验室语言,至少以现在的技术水平无法将它运用到现实生活中,R语言在现实生活中广泛应用,简直是天方夜谭!

是的,如果你是一名没有计算机背景的R语言使用者,你在实际使用中也同样会遇到许多这样或那样的问题,面对这些棘手的问题寝食难安,尝试着通过各种方式寻求解决方案。其实,在计算机领域,这些问题已经早就有了成熟、有效的解决方案。

本书的内容来自我在R语言实际使用过程中的经验总结,基本都是我在工作中使用R语言的真实记录,其中涉及计算机、互联网、数据库、大数据、统计、金融等领域,详细总结了R语言在实际使用时与Java、MySQL、Redis、MongoDB、Cassandra、Hadoop、Hive、HBase等技术综合运用的解决方案,具有实战性,可操作性强。如果你与R语言接触时间不长,本书可以让你看到R语言在各行业、各领域所散发的魅力;如果你在某行业使用R语言已经有一段时间了,可能在使用R语言的过程中遇到了瓶颈,本书将让你看到R语言在与其他计算机语言结合后所迸发的强大活力;如果你是技术人员,本书中有全局观的案例实施,也许会给你带来新的启发,甚至跟我一样,重新规划自己的职业生涯,找到学习、奋斗的新方向;如果你是企业的中高层管理者,在本书中可以看到我们已经实现的技术成果,如果需要,你甚至可以按照书中记录的详细操作步骤,直接在企业环境中实施,直接获利!

在此,我不得不强调,本书不是入门书,不讲R的语法,如果你想学习R语言的基础语言入门知识,那么,你来错地方了。但是,如果你已经具备了一定的R语言基础,但不一定具有计算机语言背景,我将告诉你R语言在真实环境下到底都能够做什么,并且详细地告诉你怎样一步一步地实施。

在与各界R语言初学者的交流中,我发现,入门后,学习R语言最大的问题,在于如何使用R语言的众多软件包,而介绍这方面的图书很难找到,只有一些网上流传的小册子。本书涉及了30个R语言包,并结合我的使用心得及案例分析,相信会解决大家R语言入门后的困扰。

本书是“R的极客理想”系列图书的第一本,姊妹篇《R的极客理想—高级开发篇》将深入介绍R语言底层原理,并使用R语言开发出企业级的应用。

本书的使用环境涉及Linux Ubuntu和Windows 7两种操作系统,R语言包的2.15.3和3.0.1两个版本,在每一节中都有明确的标识。

R语言还在不断地进步和更新,它将引导一场数据的革命,跨学科的结合是时代趋势,也是我们的机遇!读者对象

本书适合以下R语言工作者:

·计算机背景的软件工程师;

·数据库背景的DBA;

·数据分析背景的数据科学家;

·统计背景的科研工作者;

·大专院校相关专业的学生。如何阅读本书

本书的内容分为四个部分。

第一部分是R基础(第1~3章),介绍了为什么要学习R语言,R语言不同版本的安装,以及R语言中常用的12个软件包。帮助读者快速了解R语言的工具包、时间序列包和性能监控包。

第二部分是R服务器(第4~5章),介绍了R语言与其他编程语言的通信,以及R语言作为服务器的应用。帮助读者打通R语言与其他编程语言的通道,并实现R语言的服务器应用。

第三部分是数据库和大数据(第6~7章),介绍了R语言与各种数据库的通信,以及R语言与Hadoop集成。帮助读者打通R语言与各种数据库层的通道,并实现R语言对基于Hadoop大数据的处理。

第四部分是附录,介绍了Java、各种数据库以及Hadoop的安装方式。笔者希望读者可以在不借助其他参考书的情况下,完成书中所有实例。

本书为工具书,每节之间没有特别的顺序要求,你可以选择任何你感兴趣的章节进行阅读。如果你是一名初学者,想全面掌握R语言,请按顺序阅读全部的章节。勘误和支持

由于笔者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,笔者创建一个在线的图书交流网站(https://onbook.me),方便与读者进行沟通。如果读者在阅读过程中遇到问题,也可以在网站中留言,我将尽量在线上为你提供最满意的解答。书中的全部源代码都可以从华章公司网站(www.hzbook.com)或本书交流网站下载,我也会及时更新代码。本书为黑白印刷,关于更绚丽的彩色图片,读者运行源代码即可看到。如果你有什么宝贵意见,欢迎发送邮件至bsspirit@gmail.com,期待能够得到你真挚的反馈。致谢

感谢我的团队,林伟林、林伟平、邓一硕,让我们因R语言走到一起。感谢机械工业出版社华章公司的编辑明永玲,帮助我审阅全部章节,引导我顺利完成书稿。感谢我的爸爸、妈妈和爱人,感谢你们对我工作上的支持和生活上的照顾!

谨以此书献给我最亲爱的家人以及众多R语言爱好者们!张丹2014年5月于中国北京第一部分R基础■第1章 R语言基础包■第2章 时间序列基础包■第3章 R性能监控包第1章 R语言基础包

本章主要介绍了为什么要学习R语言,R语言软件的安装,R语言的开发工具,以及R语言中常用的几个软件包,以帮助读者快速了解R语言的工具包,激发读者对R语言的学习兴趣。1.1 R是最值得学习的编程语言问题

为什么要学R语言?引言

如果要问在Node、Lua、Python、Ruby和R这5种语言中,哪个语言在2014年的应用前景会更好,我会毫不犹豫地选择R,而且我认为R语言不仅是2014年,也是以后更长一段时间内的明星。在本书开篇,我们就谈谈为什么R语言是最值得学习的编程语言。1.1.1 我的编程背景

本人是程序员、架构师,从编程入门到今天,一直深信着Java是改变世界的语言,Java已经做到了,而且一直很辉煌。但当Java越来越强大,覆盖领域越来越多,变得无所不能的时候,它反而不够专业,这就给了其他语言发展的机会。

我已使用Java语言11年,R语言3年,Node 1年,对于这个问题“哪个语言在2014年的应用前景会更好”,我选择R语言。1.1.2 为什么我会选择R

从下面的9个方面来说明我选择R的原因。

·R的基因

·R的发展

·R的社区和资源

·R的哲学

·R的使用者

·R的语法

·R的思维模式

·R解决的问题

·R的不足1.R的基因

1992年,新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两位统计学家,为了方便教授初等统计课程,发明了一种编程语言,因为他们名字的首字母都是R,于是R便成为这门语言的名称。

从开始学习R语言,我就开始了知识的跨界思考。统计学基于概率论,概率论又基于数学,用计算机的方式编程,同时解决某个领域的实际问题。多种学科知识的交集,决定着我们解决问题的能力。统计的基因,让R语言与众不同!2.R的发展

R一直在小众领域成长着,最早也只有统计学家在用,主要用来代替SAS做统计计算。然而时代在进步,随着大数据的爆发,R终于在这一波浪潮中被工业界所发现。然后,越来越多有工程背景的人加入到这个圈子,对R的计算引擎、性能以及各种程序包进行改进和升级,让R获得了新生。

我们现在用到的R语言软件,已经越来越接近工业软件的标准了。由工程师推动的R的发展,其速度远远地超过了由统计学家推动的发展。随着人们对数据分析需求的进一步增加,R会以更快的速度继续发展,将成为免费的、开源的数据分析软件的代名词。3.R的社区和资源

R的发展离不开R的各种社区支持,尤其是R的官方社区支持。在R的官方网站中,我们可以下载到R语言软件、R的第三方软件包和R的其他支持软件。当然,我不得不承认R的官方网站(http://www.r-project.org/)从Web页上看起来太简陋了,稍微调整一下CSS样式表,都会比现在好看很多。也许这种简单、无修饰也是统计学家的基因吧。R语言的社区资源同其他语言一样丰富,除了官方社区,还有开发者论坛(http://r.789695.n4.nabble.com/)、R-Journal列表(http://journal.r-project.org/)、软件包列表、R语言图书列表以及R用户组等。

R是自由软件,因此开发者可以开发自己的软件包,封装自己的功能,然后在CRAN (http://cran.rstudio.com/)上面发布。截止到2014年2月,共有5236个R包在CRAN上面发布。可能很多人会说只有5236个包,数量太少了。这是因为CRAN是需要提交申请的,每个包都必须经过R语言小组审核、检查后才会发布出来,而且审核非常严格。高质量是发布一个新的R包的基本要求。由于CRAN过于严格的审查,让很多开发者选择在RForge(https://r-forge.r-project.org/)上发布R包,还有些R包是基于Github发布的,我也在Github上面发布了自己的R包:https://github.com/bsspirit/chinaWeather。

下面列出与R语言相关的主要社区和资源。

·R官方网站:http://www.r-project.org/

·R开发者论坛:http://r.789695.n4.nabble.com/

·CRAN:http://cran.rstudio.com/

·RForge:https://r-forge.r-project.org/

·R新闻和博客:http://www.r-bloggers.com/

·统计之都:http://cos.name/4.R的哲学

每种语言都有自己的设计理念和哲学,而我体会的R的哲学就是“静下心做事情”。R不需要很长的代码,也不需要设计模式。一个函数调用,传几个参数,就能实现一个复杂的统计模型。我们需要思考的是用什么模型、传什么参数,而不是怎么进行程序设计。我们可能会用R实现“从一个数学公式,变成一个统计模型”的过程,我们也可能会考虑“如何让一个分类器结果更准确”,但我们不必思考一个算法的“时间复杂度是多少,空间复杂度是多少”。

R的哲学,可以让你把数学和统计学的知识,变成计算模型,这也是R的基因所决定的。5.R的使用者

R语言早期主要是学术界统计学家在用,后来逐渐被其他很多领域的学者所用。R语言有各种不同的应用领域,包括统计分析、应用数学、计量经济、金融分析、财经分析、人文科学、数据挖掘、人工智能、生物信息学、生物制药、全球地理科学、数据可视化等。

近几年,由互联网引发的大数据革命让工业界的人开始认识R,加入R。当越来越多的有工程背景的人加入到R语言使用者的队伍后,R才开始向着全领域发展,逐步实现工业化的要求。现在,R已不仅仅是学术界的语言,它还是工业界必备的语言。

下面列出一些推动R语言在工业界发展的R包。

·RevolutionAnalytics公司的RHadoop产品,让R可以直接调用Hadoop集群资源。

·RStudio公司的RStudio产品,给了我们对编辑软件新的认识。

·RMySQL、ROracle、RJDBC打通了R和数据库之间的访问通道。

·rmongodb、rredis、RHive、rHBase、RCassandra打通了R和NoSQL数据库之间的访问通道。

·Rmpi、snow打通了单机多核并行计算的通道。

·Rserve、rwebsocket打通了R语言的跨平台通信的通道。6.R的语法

R是面向对象语言,语法如同Python。但R的语法很自由,很多函数的名字看起来都是那么随意,这也是R的哲学的一部分吧!例如,看到如下这样的赋值语法,有其他语言基础的程序员,肯定会崩溃的。> a<-c(1,2,3,4)->b> a[1] 1 2 3 4> b[1] 1 2 3 4

随机取正态分布N(0,1)的10个数,又是这么的简单。> rnorm(10)[1] -0.694541401 1.877780959 -0.178608091 0.004362026[5] 0.836891967 1.794961298 0.115284187 0.155175219[9] 0.464028612 -0.842569561

用R画鸢尾花的数据集的散点图,有非常好的可视化效果。> data(iris) # 加载数据集> head(iris) # 查看前6 行数据集 Sepal.Length Sepal.Width Petal.Length Petal.Width Species1      5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa4 4.6 3.1 1.5 0.2 setosa5 5.0 3.6 1.4 0.2 setosa6 5.4 3.9 1.7 0.4 setosa

输出结果见图1-1。图1-1 鸢尾花的数据集的散点图

正是因为R自由的哲学,让R的语法独特而简洁,我已经喜欢上这种哲学了。7.R的思维模式

R语言让我跳出了原有的思维定式。使用R语言,我们应该像统计学家那样思考问题,而不是拘泥于程序员的思维模式。统计学家的思维模式,是先考虑为什么,再考虑做什么。而程序员的思维模式,是直接考虑怎么做,等有了结果再考虑为什么。

R语言是直接面向数据的语言。在我们的日常生活中,无论做什么事情都会产生数据,上网有浏览数据,买东西有消费数据,就算什么都不干,也会受大气PM2.5的影响,有空气污染指数数据。利用R语言,我可以直接分析这些数据。面向什么业务,就分析什么数据,不需要从产品经理向程序员的角色转换,不需要考虑有什么功能,更不需要考虑程序设计的事。跳出程序员的思维模式,我们所能认知的东西会更多,于是也能找到更适合自己的定位。8.R解决的问题

当数据成为生产资料的时候,R就是为人们能运用生产资料创造价值的生产工具,R语言主要解决的是数据的问题。整个人类文明所获得的全部数据中,有90%以上是自互联网诞生以来产生的;当Hadoop帮助人们解决了大数据存储的问题后,如何发现数据的价值,则成为当前最火的话题。R语言具有强大的统计分析能力,这就让它成为数据分析最好的工具。所以,R要解决的问题,就是如何挖掘数据价值的问题。9.R的不足

尽管前面说了R的各种优点,但我们依然不能说R就是完美无缺的,因为R也有很多不足。具体来说,R的缺点有下面5个。

·R软件是统计学家编写的,并不如软件工程师编写的软件那么健壮。

·R软件的性能,存在一些问题。

·R语言很自由,语法命名不太规范,需要花时间熟悉。

·R语言的内核编程,要比普通的R包使用,难度大得多。

·R语言结合了很多数学、概率、统计的基础知识,学起来有一定门槛。

R的这些不足,都是可以克服的。当有更多有工程背景的人加入的时候,R语言会比现在更强大,会帮助使用者创造更多的价值。1.1.3 R的应用前景

R可以做所有SAS能做的事情。SAS系统全称为Statistics Analysis System,是国际上最知名的商业分析软件工具之一。SAS用于决策支持的大型集成信息系统,其重要组成部分和核心功能是统计分析功能。在数据处理和统计分析领域,SAS系统被誉为国际上的标准软件系统,堪称统计软件界的巨无霸。

R和SAS处于完全的竞争的关系中,R的免费和开放,让R有着更广阔的应用前景。下面给出当今R应用最热门的领域。

·统计分析:统计分布、假设检验、统计建模。

·金融分析:量化策略、投资组合、风险控制、时间序列、波动率。

·数据挖掘:数据挖掘算法、数据建模、机器学习。

·互联网:推荐系统、消费预测、社交网络。

·生物信息学:DNA分析、物种分析。

·生物制药:生存分析、制药过程管理。

·全球地理科学:天气、气候、遥感数据。

·数据可视化:静态图、可交互的动态图、社交图、地图、热图、与各种JavaScript库的集成。

本书会介绍R语言在统计分析、金融分析、数据挖掘、推荐系统、社交网络等领域的应用。R有着非常广阔的应用前景,而且R也将成为新一代的最有能力创造价值的工具。1.1.4 时代赋予R的任务

R语言是在大数据时代被工业界了解和认识的语言,R语言被时代赋予了挖掘数据价值、发现数据规律以及创造数据财富的任务。R语言也是帮助人们发挥智慧和创造力的最好的生产工具,因此我们不仅要学好R语言,还要用好R语言,为社会注入更多的创新的生产力。

总而言之,在这5种语言中,R是最特殊的,R被赋予了与其他语言不同的使命。R的基因决定了R将成为2014年,也可能是以后更长一段时间的明星。因此我认为“R是最值得学习的编程语言”。不论你正在读书,还是已经工作,掌握R语言这个工具并找最适合自己的位置将会前途无量。1.2 R的历史版本安装问题

在Linux Ubuntu上,如何安装不同版本的R?引言

R语言已进入到了3.0的时代,但有些第三方的R包还处于2.15的状态,没有升级,如RHadoop等。我们要用这些R包的时候,就需要指定版本的R软件。对于Windows来说,这是很简单的操作,只要安装不同的(.exe)文件就行了;对于Linux系统来说,就不那么容易了,需要我们手动进行配置。不熟悉Linux系统的同学,在这里就很容易卡住。所以,本节就讲一下如何在Linux Ubuntu系统中安装R语言软件包的指定版本。1.2.1 R在Windows中安装

通过R的官方网站(http://cran.r-project.org/),我们可以下载Linux、MacOS、Windows系统的R语言安装包。R在Windows系统中安装非常简单,下载可执行文件(.exe),双击即可进行安装。安装后就能运行R语言的界面,如图1-2所示。图1-2 R在Windows系统中的安装界面1.2.2 R在Linux Ubuntu中安装

本书使用的Linux是Ubuntu 12.04.2LTS 64bit的系统,安装R语言软件包可以通过Ubuntu的apt-get工具进行安装。下面就介绍在Linux Ubuntu中安装R语言的过程。~ R # 检查R 是否已安装The program 'R' is currently not installed. You can install it by typing:sudo apt-get install r-base-core~ sudo apt-get install r-base-core # 根据提示安装R 语言软件包~ R --version # 检查R 的版本R version 2.14.1 (2011-12-22)Copyright (C) 2011 The R Foundation for Statistical ComputingISBN 3-900051-07-0Platform: x86_64-pc-linux-gnu (64-bit)

~R#检查R是否已安装

前面的检查结果表明,我们安装的是R的默认版本,即2.14.1版,这与本书中R的版本是不符的,接下来我们希望安装最新版本R的软件包。1.2.3 R的最新版本安装

首先,删除Linux Ubuntu系统中原有的R软件包,代码如下:~ sudo apt-get autoremove r-base-core # 删除系统中原有的R 软件包

接下来,找到一个Ubuntu的软件源镜像(http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu/),Linux Ubuntu 12.04对应的名字是precise,进入到precise/目录,找到r-base-core相关的文件,发现有多个R的版本。把这个软件源,增加到apt的sources.list文件中,代码如下: ~ sudo sh -c "echo deb http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntuprecise/ >>/etc/apt/sources.list" # 在sources.list 文件最下面,新加一行~ sudo apt-get update # 更新源~ sudo apt-get install r-base-core # 再次安装R 语言软件包~ R –version # 检查R 的版本R version 3.0.3 (2014-03-06) -- "Warm Puppy"Copyright (C) 2014 The R Foundation for Statistical ComputingPlatform: x86_64-pc-linux-gnu (64-bit)

这时我们就安装了最新的R语言版本—3.0.3版。1.2.4 R的指定版本安装

由于本书中的例子,大部分是基于3.0.1完成的,而RHadoop的例子是基于2.15.3完成的,因此我们还需要指定R的安装版本。1.安装R的2.15.3版本~ sudo apt-get autoremove r-base-core # 删除系统中原有的R 软件包~ sudo apt-get install r-base-core=2.15.3-1precise0precise1 # 安装R 的2.15.3 版本~ R –version # 检查R 语言软件包版本R version 2.15.3 (2013-03-01) -- "Security Blanket"Copyright (C) 2013 The R Foundation for Statistical ComputingISBN 3-900051-07-0Platform: x86_64-pc-linux-gnu (64-bit)2.安装R的3.0.1版本~ sudo apt-get install r-base-core=3.0.1-6precise0 # 安装R 的3.0.1 版本~ R –version # 检查R 语言软件包版本R version 3.0.1 (2013-05-16) -- "Good Sport"Copyright (C) 2013 The R Foundation for Statistical ComputingPlatform: x86_64-pc-linux-gnu (64-bit)

这样我们就可以很方便地指定安装不同版本的R的语言软件包,满足不同的应用需求!1.3 fortunes记录R语言的大智慧问题

如何才能更深入地了解R,它的起源、成长、经历是怎样的?引言

R语言是在大数据“火”起来后,映入人们眼球的。但R语言的社区已经存在很多年,我们并不知道,R语言在很长的历史时期,有着什么样的智慧。不过,正有人悄悄地记录着R语言的大智慧。1.3.1 fortunes介绍

fortunes库是一个R语言的语录集,截至2013年12月14日,一共总结了360条R-help的留言。这些都是R语言智慧的精华,让R语言的后辈使用者,可以更了解R语言的本身,了解R的精神。1.3.2 fortunes安装

本节使用的系统环境是:

·Linux:Ubuntu 12.04.2LTS 64bit

·R:3.0.1x86_64-pc-linux-gnu

注 fortunes同时支持Windows 7环境和Linux环境。

Fortunes的安装过程如下。~ R # 启动R 程序> install.packages("fortunes") # 安装fortunes 包> library(fortunes) # 加载fortunes 包> ?fortunes # 查看帮助1.3.3 fortunes包的使用

fortunes包的使用非常简单,只有一个函数fortune()。> fortune() # 随机查看一条语录Barry Rowlingson: Your grid above has 8*6 = 42 points.(That was a subtle Hitchhikers Guide To The Galaxy reference there, honest, andnot a stupid dumb multiplication mistake on my part after working four 18-hourdays on the trot...)Peter Dalgaard: [...] Don't panic, just throw yourself at the ground and miss. -- Barry Rowlingson and Peter Dalgaard R-help (March 2004)> fortune(108) # 指定查看一条语录Actually, I see it as part of my job to inflict R on people who are perfectlyhappy to have never heard of it. Happiness doesn't equal proficient andefficient. In some cases the proficiency of a person serves a greater good thantheir momentary happiness. -- Patrick Burns R-help (April 2005)

完整的语录下载地址是http://cran.r-project.org/web/packages/fortunes/vignettes/fortunes.pdf。静下心来阅读这些智慧精华就能更了解R语言本身。想用好一门语言,就需要更深入地了解它。1.4 formatR代码自动化排版问题

如何写出让别人看得懂,且符合规范的代码呢?引言

新手写的代码,大都不注重代码规范,以为实现功能就算完成了。这种代码不仅别人不愿意读,过几个月后再看自己都会觉得很烂。不仅仅新手如此,大多数程序员写的代码都没有考虑如何让别人看着更方便。程序员最痛苦的事情,不是每天加班写程序,而是每天加班读懂别人写的程序。最后,有人实在忍受不了其他人的丑陋代码,便开始制定代码编程规范,又有人去实现代码的自动化排版工具。formatR就是这样的一个R语言自动化排版的工具。1.4.1 formatR介绍

formatR包是一个实用的包,提供了R代码格式化功能,可以自动设置空格、缩进、换行等代码格式,让代码看起来更友好。formatR包中的API中主要有下面5个函数。

·tidy.source:对代码进行格式化

·tidy.eval:输出格式化后的R代码和运行结果

·usage:格式化函数定义,并按指定宽度输出

·tidy.gui:一个GUI工具,支持编辑并格式化R代码

·tidy.dir:对某个目录下,所有R脚本进行格式化1.4.2 formatR安装

本节使用的系统环境是:

·Win764bit

·R:3.0.1x86_64-w64-mingw32/x64b4bit

注 formatR同时支持Windows 7环境和Linux环境。

formatR的安装过程如下:~ R # 启动R 程序> install.packages("formatR") # 安装formatR 包library(formatR) # formatR 加载1.4.3 formatR的使用1.字符串格式化

tidy.source()函数,以字符串作为输入参数,对代码格式化。> tidy.source(text = c("{if(TRUE)1 else 2; if(FALSE){1+1", "## comments", "} else 2}")){ if (TRUE) 1 else 2 if (FALSE) { 1 + 1 ## comments } else 2}

通过执行tidy.source()函数,把代码进行了重新格式化,让我们一眼就可以看得懂。2.文件格式化

messy.R是一个不太规范的R程序文件。我们读入这个文件,然后通过tidy.source()函数,以文件对象作为输入参数,进行代码格式化。> messy = system.file("format", "messy.R", package ="formatR")> messy[1] "C:/Program Files/R/R-3.0.1/library/formatR/format/messy.R"

messy.R的原始代码输出:> src = readLines(messy)> cat(src,sep="\n") # a single line of comments is preserved1+1if(TRUE){x=1 # inline comments}else{x=2;print('Oh no... ask the right bracket to go away!')}1*3 # one space before this comment will become two!2+2+2 # 'short comments'lm(y~x1+x2, data=data.frame(y=rnorm(100),x1=rnorm(100),x2=rnorm(100)))### only'single quotes' are allowed in comments1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 ## comments after a long line'a character string with \t in it'## here is a long long long long long long long long long long long long longlong long long long long long long comment

格式化后的代码输出:> tidy.source(messy)# a single line of comments is preserved1 + 1if (TRUE) { x = 1 # inline comments} else { x = 2 print("Oh no... ask the right bracket to go away!")}1 * 3 # one space before this comment will become two!2 + 2 + 2 # 'short comments'lm(y ~ x1 + x2, data = data.frame(y = rnorm(100), x1 = rnorm(100), x2 =rnorm(100))) ### only 'single quotes' are allowed in comments1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +1 + 1 + 1 ## comments after a long line"a character string with \t in it"## here is a long long long long long long long long long long long long longlong long long##long long long long comment

可以看出,格式化后的输出,经过了空格、缩进、换行、注释等处理,代码可读性就增强了。3.格式化并输出R脚本文件

新建R脚本文件demo.r。~ vi demo.ra<-1+1;a;matrix(rnorm(10),5);if(a>2) { b=c('11',832);"#a>2";} else print('a is invalid!!')

格式化demo.r。> x = "demo.r"> tidy.source(x)a <- 1 + 1amatrix(rnorm(10), 5)if (a > 2) { b = c("11", 832) "#a>2"} else print("a is invalid!!")

输出格式化结果到文件demo2.r,如图1-3所示。> f="demo2.r"> tidy.source(x, keep.blank.line = TRUE, file = f)> file.show(f)图1-3 输出格式化结果到文件4.输出格式化代码和运行结果

使用tidy.eval()函数,以字符串形式,执行R脚本:> tidy.eval(text = c("a<-1+1;a", "matrix(rnorm(10),5)"))a <- 1 + 1a## [1] 2matrix(rnorm(10), 5)## [,1] [,2]## [1,] 0.65050729 0.1725221## [2,] 0.05174598 0.3434398## [3,] -0.91056310 0.1138733

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载