前言
为什么要写这本书
本书是我写的“R的极客理想”系列丛书的第二本,主要介绍了R语言本身的核心技术、R语言的高级开发应用、R语言与其他学科及知识领域的跨学科综合应用。
其实,早在我的第一本书《R的极客理想——工具篇》中,就已经介绍了R语言的30多个工具包的使用方法,并以IT人的角度,告诉读者如何高效地使用第三方R包,把原有IT知识运用到R语言的学习过程中。但由于一本书的篇幅有限,《R的极客理想——工具篇》只讲了如何使用R语言,没有讲原理。
而本书将弥补这一遗憾,主要介绍R语言本身的核心技术:包括环境空间、面向对象、文件管理、数学计算、R包开发等主题。我希望通过这本书,可以让读者更深入地了解R语言、掌握R语言的核心技术、理解R语言的第三方包的特性,甚至可以自己动手开发出属于自己风格的优秀R包。说不定,不久的将来我会因用到你开发出来的R包而省力不少。
除此之外,本书的另一大亮点就是:R语言与其他学科知识在不同领域的跨学科综合应用。在书中,我将毫无保留地向读者展示:我是怎样将R语言与其他知识相结合,在不同领域让R大放异彩的。相信这部分内容会让很多读者眼前一亮,为之惊叹,原来R还可以这么玩儿!也希望这部分内容可以让大家有所启发,让各行业、各知识领域的朋友都可以接触R,运用R。时至今日,R语言已经不再是局限于科学家们使用的实验室语言,它已经具备了实际开发应用的能力,并且在挖掘数据价值、发现数据规律、创造数据财富等方面极具智慧和创造性!
如果把R语言比作一门武功,《R的极客理想——工具篇》就是兵器使用秘籍(比如什么“打狗棍法”啊、“独孤九剑”啊、“小李飞刀”啊),它可以帮助你在短时间内便捷、有效地提高工作效率,让你在R语言上的修为明显提高,但时间久了,你会因各种原因遇到自己的瓶颈,难以突破。
而本书则是武功的内功心法(比如什么《九阳真经》、《北冥神功》之类的,敬请对号入座,但别拿《葵花宝典》说事儿,谢谢),书中不仅介绍了R语言本身的核心技术,帮你打通任督二脉;而且着重讲述了R语言在实际使用过程中,如何与其他学科、领域结合运用,融会贯通,以无招胜有招,甚至自立门派成为一代宗师,这些都是有可能的!(咳咳,扯远了!)
在这里,我必须再次严肃地强调,本书不是R语言的入门书,零基础的朋友要先补充一些R语言的基础知识!本书包括R语言开发的高级内容,阅读本书,不但需要你有R语言使用经验,而且需要你具备一定的计算机背景知识和使用经验,只有这样,你才能更深刻地体会并运用书中的经验总结。
本书的内容完全是我在R语言的实际使用过程中总结而成的,基本都是我在工作中使用R语言的真实记录,以R语言的高级开发为主,其中还涉及计算机、统计、数学和金融四个学科的知识。
本书的核心内容包括两方面,一方面是R的高级编程,另一方面是跨界知识的综合运用。对于R的高级编程,本书详细总结了R语言的环境空间的定义和使用、文件系统管理、最新版本R 3.1.1的新特性,让你体会R语言的底层设计;全面介绍R语言中四种面向对象体系的程序设计和使用,通过面向对象的程序设计,让R语言有能力做出符合现实世界的复杂应用;另外还介绍了完整的R包开发流程,并提供每日中国天气的应用案例和游戏开发的案例,帮助读者创建自己的R包,打开R语言产品化的思路。
对于跨界知识的综合运用,R语言不仅可以用来非常方便地进行那些让人头疼的数学计算,无论是初等数学或者高等数学,概率或者统计都可以非常轻松、方便的,从此数学变得不再神秘莫测、遥不可及。用R语言还可以创建各种模型,书中算法案例包括协同过滤算法模型、基于矩阵计算的PageRank模型、金融的交易策略模型和遗传算法的使用。几行代码几分钟,就可以让我们头脑中的想法变成可运行的算法原型。
另外,虽然R不是特别适合开发游戏,但如果真用R语言开发游戏2048,也就需要200行代码,还有哪种语言可以匹敌呢?说到这里肯定有人问:“你为什么要用R开发游戏啊?”“为什么不用Java开发啊?”“我不用R开发,用Java开发不是也一样么?”其实,我就是想用这种方式向大家展示R语言简洁的风格、自由的思想、极富想象的创造力,希望用我这个“R极客”的玩耍心态,引发大家对R的无限想象!最后,我们把模型产品化,发布一个属于自己的R包,让全世界的人都能使用,这是一件多么令人兴奋的事情。
在与各界R语言使用者的交流中,我发现,有编程背景的使用者可以写出干净漂亮且运行高效的代码,但由于欠缺统计知识,对模型优化就只能束手无策、无可奈何了;而那些具备统计背景的使用者,虽然可以独立完成一个模型的设计和优化,但对于如何产品化实施就完全找不到办法了。
本书介绍了多个场景案例,不仅从学术的角度完成了模型的设计,而且用计算机的方法实现产品。通过案例的学习,不同学科背景的R语言使用者可以站在其他人的角度,找到新的思维方法。这是本书的又一大亮点!
对于大多数程序员来说,学习R语言比较轻松容易,但运用R语言却非常困难。R语言虽然没有像C/C++一样的复杂程序语法,也不用像Java一样宏观考虑全局架构,更没有JavaScript一样灵活,但是,R语言面向数据本身的编程思想是完全有别于其他编程语言的,这就使得很多程序员在使用R语言时虽然理解语法,但依旧不知道如何应用。
我认为,学习R语言是为了找到个性化的自己,定位自己,综合运用自身的知识进行跨学科创新,而不是去复制别人的想法。R语言的跨界运用,需要你具备基础学科(初等数学、高等数学、线性代数、概率论、统计学)+业务知识(金融、生物、互联网)+IT技术(R语法、R包、数据库、算法)的综合能力,所以只有提升自己的综合知识水平,才能真正地学好R语言。换句话说,一旦你学成R语言,你将是不可替代的。
在此,我不得不再次强调,本书不是入门图书,而是R语言的高级开发图书。本书不讲R的入门语法,也不介绍R语言第三方包的使用。但是,如果你已经具备了一定的R语言基础,想把自己的R语言模型产品化,那么我将告诉你如何提高程序的可靠性和可扩展性,以及如何发布属于自己的R包。
本书是“R的极客理想”系列图书的第二本,第三本《R的极客理想——量化投资篇》将介绍R语言在金融领域的应用,通过R语言构建交易模型,并实现自动化交易的过程,真正地让技术人员把自己的知识变成价值。
本书的使用环境包括Linux Ubuntu和Windows 7两种操作系统,在每一节中都有明确的标识,所有的程序都是在R语言3.1.1版本中测试通过的。
R语言还在不断地进步,它将引导一场数据的革命,跨学科的结合是时代趋势,也是我们的机遇!
读者对象
本书适合以下所有R语言工作者:
□ 计算机背景的软件工程师;
□ R语言的高级使用者;
□ 数据分析背景的数据科学家;
□ 统计背景的科研工作者;
□ 开设相关课程的院校学生。
如何阅读本书
本书的内容分为三个部分。第一部分是R的计算和算法应用(第1~2章),介绍了R语言的知识体系结构,R语言对基础学科的支持,以及通过基础学科实现各种算法,可帮助读者快速了解R语言中的数学计算方法和自定义模型算法开发。
第二部分是深入R语言程序开发(第3~4章),介绍了R语言内核相关的编程,包括环境空间的定义和使用,以及面向对象方法的程序设计和使用,可帮助读者深入了解R语言的底层知识,用面向对象的方法设计复杂的程序结构。
第三部分是开发自己的R包(第5~6章),介绍了R包开发的完整流程,并提供每日中国天气的应用案例和游戏开发的案例,可帮助读者创建自己的R包,打开R语言产品化的思路。
本书有很多综合运用的知识,在阅读本书的时候,建议读者顺序阅读全部的章节。
勘误和支持
由于笔者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,笔者创建了一个在线的图书交流网站(http://onbook.me),方便与读者进行沟通。如果读者在阅读过程中遇到问题,也可以在官方网站中留言,我将尽量在线上为你提供最满意的解答。书中的全部源代码,都可以从华章公司网站(www.hzbook.com)或本书交流网站下载,我也会及时更新代码。如果你有什么宝贵意见,欢迎发送邮件至bsspirit@gmail.com,期待能够得到你真挚的反馈。
致谢
感谢我的创业团队成员林伟林和林伟平,是R语言让我们走在了一起。感谢机械工业出版社华章公司的编辑明永玲,帮助我审阅全部章节,引导我顺利完成书稿。感谢我的爸爸、妈妈和爱人,感谢你们对我工作上的支持和生活上的照顾!
谨以此书献给我最亲爱的家人以及众多R语言爱好者们!
张丹
2014年11月于中国北京