前言
为什么要写这本书
本书是我写的“R的极客理想”系列丛书的第二本,主要介绍了R语言本身的核心技术、R语言的高级开发应用、R语言与其他学科及知识领域的跨学科综合应用。
其实,早在我的第一本书《R的极客理想——工具篇》中,就已经介绍了R语言的30多个工具包的使用方法,并以IT人的角度,告诉读者如何高效地使用第三方R包,把原有IT知识运用到R语言的学习过程中。但由于一本书的篇幅有限,《R的极客理想——工具篇》只讲了如何使用R语言,没有讲原理。
而本书将弥补这一遗憾,主要介绍R语言本身的核心技术:包括环境空间、面向对象、文件 为什么要写这本书
本书是我写的“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月于中国北京管理、数学计算、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语言产品化的思路。
本书有很多综合运用的知识,在阅读本书的时候,建议读者顺序阅读全部的章节。
勘误和支持
由于笔者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,笔者创建了一个在线的图书交流网站),方便与读者进行沟通。如果读者在阅读过程中遇到问题,也可以在官方网站中留言,我将尽量在线上为你提供最满意的解答。书中的全部源代码,都可以从华章公司网站(www.hzbook.com)或本书交流网站下载,我也会及时更新代码。
致谢
感谢我的创业团队成员林伟林和林伟平,是R语言让我们走在了一起。感谢机械工业出版社华章公司的编辑明永玲,帮助我审阅全部章节,引导我顺利完成书稿。感谢我的爸爸、妈妈和爱人,感谢你们对我工作上的支持和生活上的照顾!
谨以此书献给我最亲爱的家人以及众多R语言爱好者们!
张丹
2014年11月于中国北京
作者简介
张丹,R语言资深用户,系统架构师,况客科技联合创始人(Qutke.com)。有10年IT程序开发和系统架构设计的经验,精通Java、R和Javascript三种编程语言,熟悉数据挖掘、统计和金融的多种算法。目前在互联网金融量化投资方向创业中,个人博客Alexa全球排名前10万。
目录
前言
第一部分 R的计算和算法应用
第1章 R语言知识体系和数学函数 2
1.1 R语言知识体系概览 2
1.1.1 R语言的知识体系结构 3
1.1.2 R语言学习 9
1.2 R语言中的数学计算 11
1.2.1 基本计算 12
1.2.2 三角函数计算 17
1.2.3 复数计算 22
1.2.4 方程计算 23
1.3 概率基础和R语言 28
1.3.1 随机变量介绍 28
1.3.2 随机变量的数字特征 29
1.3.3 极限定理 33
1.4 常用连续型分布介绍及R语言实现 35
1.4.1 均匀分布 35
1.4.2 正态分布 37
1.4.3 指数分布 39
1.4.4 伽玛分布 41
1.4.5 韦布尔分布 43
1.4.6 卡方分布 44
1.4.7 F分布 46
1.4.8 t分布 48
1.4.9 贝塔分布 50
1.5 R语言的导数计算 51
1.5.1 导数计算 52
1.5.2 初等函数的导数公式 54
1.5.3 二阶导数计算 57
1.5.4 偏导数计算 58
第2章 R语言的算法实现 61
2.1 用R重写Mahout协同过滤算法 61
2.1.1 Mahout的推荐算法模型 62
2.1.2 R语言模型实现 64
2.1.3 算法实现的原理——矩阵变换 67
2.1.4 算法总结 69
2.2 PageRank算法R语言实现 69
2.2.1 PageRank算法介绍 70
2.2.2 PageRank算法原理 70
2.2.3 R语言单机算法实现 72
2.2.4 R语言分步式算法实现 75
2.3 二条均线打天下 78
2.3.1 移动平均线 79
2.3.2 均线模型 79
2.3.3 用R语言实现均线模型 80
2.4 R语言中的遗传算法 94
2.4.1 遗传算法介绍 94
2.4.2 遗传算法原理 96
2.4.3 R语言中的遗传算法 97
第二部分 深入R语言程序开发
第3章 R内核编程 106
3.1 撬动R内核的高级工具包pryr 106
3.1.1 pryr介绍 107
3.1.2 pryr安装 107
3.1.3 pryr使用 108
3.2 揭开R语言中环境空间的神秘面纱 120
3.2.1 R语言的环境空间 121
3.2.2 环境空间的特征 124
3.2.3 环境空间的访问 126
3.3 解密R语言函数的环境空间 129
3.3.1 R语言的函数环境空间 129
3.3.2 封闭环境 130
3.3.3 绑定环境 130
3.3.4 运行环境 131
3.3.5 调用环境 132
3.3.6 完整的环境操作 133
3.4 用R进行文件系统管理 134
3.4.1 文件系统介绍 135
3.4.2 目录操作 135
3.4.3 文件操作 139
3.4.4 几个特殊的目录 142
3.5 R语言3.1.x版本新特性 143
3.5.1 R语言 3.1.x版本介绍 144
3.5.2
以下为对购买帮助不大的评价