本书对R语言做了简要描述,配以大量编程实践和代码样例,适合于想要提高R语言性能的程序员和开发者,对大量数据的处理、R语言的实际应用、基准测试均有指导意义。现代社会面对越来越庞大的数据和数据分析,R语言正是分析和处理大数据的有效方式,本书正是全面解析R语言的优秀书目。
√ 学习如何对R程序进行性能分析和基准测试
√ 识别瓶颈,评估和识别CPU的性能限制,识别内存或磁盘I/O的局限性
√ 使用诸如计算向量化这样的技巧来优化R程序的计算速度
√ 更高级的技术,比如编译代码、利用GPU的计算能力、优化内存消耗
√ 通过基于磁盘的内存和块技术处理超过内存容量的数据集
前言
随着数据越来越重要,商家和科学家们也越来越需要高效分析和处理大规模数据的工具。近年来,R这一工具越来越普遍地应用于数据处理、统计分析和数据科学。虽然R最初源自学术界,但如今已经被工业界各个组织广泛使用。
然而,由于R本身的设计问题,它能够有效处理的数据规模和计算复杂度有限。这对于需要处理日益增长的大规模数据的R用户来说,是个极大的障碍。
《R高性能编程》这本书有助于理解R的性能难题,比如内存和计算方面的限制。本书还给出了很多克服这些难题的技术。你可以根据需求和计算环境选择其中一种技术或者混合使用不同的技术。
这本书是关于如何提升R程序性能的实用指南,并适当地解释了使你能够理解每一个解决方案背后的原因。同样,对于本书提到的每一个技术我们都提供了代码示例,以及在我们的机器上生成的性能分析结果以展示性能的提升情况。我们建议大家根据自己的实际环境敲写和运行这些代码,然后自己看看性能提升情况。
如果想要知道R的设计原理并理解其性能限制的原因,R内部文档(http://cran. r-project.org/doc/manuals/r-release/R-ints.html)中提供了有用的线索。
本书是基于开源R编写的,因为开源版本的R是最为广泛使用的,而且任何人都可以免费获得。如果你用的是商业版的R,请跟软件提供商确认一下他们都做了哪些性能优化。
R社区有很多提升R性能的新包,可从CRAN(http://cran.r-project.org/)获取。鉴于CRAN有成千上万个包,我们不可能逐一分析,来确定哪个包针对哪个操作提供了性能改善。相反,本书重点关注R程序员最常见的任务,介绍那些任何R项目都可以使用的技术。
本书的内容
第1章 理解R的性能:为什么R程序有时候很慢?从窥探R的底层原理开始,探索R程序达到性能极限的几种方式。我们讲述某些时候R的设计是如何给R程序造成计算(CPU)、内存(RAM)和磁盘输入/输出(I/O)上的性能瓶颈的。
第2章 性能分析:衡量代码的性能 介绍衡量R代码性能的几个技术,从而理解性能问题的本质。这些技术贯穿全书使用。
第3章 加快R运行的简单方法 介绍如何提升R代码的计算速度。这些基本技术在任何R程序中均可使用。
第4章 使用编译代码加快运行速度 讨论利用以另一种语言编写的编译代码,比如使用C编译的代码,来最大程度优化计算的性能。我们会看到编译代码是怎样加快R运行的,以及如何将编译代码集成到R程序中。
第5章 使用GPU让R运行得更快 这一章把我们带入现代加速器领域,利用GPU高速运行复杂计算。
第6章 减少内存使用的简单方法 介绍管理和优化RAM使用情况的基本技术,使R程序能够处理更大的数据集。
第7章 使用有限的内存处理大型数据集 解释怎样使用节约内存的数据结构和磁盘常驻的数据格式,处理超过可用内存大小的数据集。
第8章 使用并行计算加倍提升性能 介绍R中的并行性。我们会探索如何在单个机器和多个机器上并行地执行R代码。此外,还会讨论设计并行代码需要考虑哪些因素。
第9章 将数据处理交给数据库系统 描述如何将某些计算转交给外部数据库系统。这有助于将进出数据库的大数据(Big Data)迁移开销最小化,特别是当你已经拥有一个强大的数据库系统,你就可以利用它的计算能力和速度。
第10章 R和大数据 介绍利用大数据技术达到R的性能极限,并总结全书。
如果你赶时间,我们推荐优先阅读以下几个章节,然后再根据具体情况补充阅读其他相关章节:
? 第1章 理解R的性能:为什么R程序有时候很慢?
? 第2章 性能分析:衡量代码的性能
? 第3章 加快R运行的简单方法
? 第6章 减少内存使用的简单方法
阅读本书需要什么
本书中的所有代码都是在Mac OS X 10.9上编写的,使用64位的R 3.1.1版本。我们还尽可能地在Ubuntu 14.04 LTS和Windows 8.1上进行了测试。所有代码示例都可以到(https://github.com/com/r-high-performance-programming/rhpp-2015)下载。
要使用代码示例,建议安装R 3.1.1 64位版本,或者更高版本。
我们还建议在UNIX环境(包括Linux和Mac OS X)中运行R。因为如果在Windows上运行R,有些示例中的包,比如bigmemory只能在Unix环境下运行。示例代码中凡是UNIX和Windows环境下存在差异的,我们都会予以说明。
需要使用64位的R,因为有些操作(比如创建一个包含231个或更多元素的向量)在32位版本上是不可实现的。而且,64位版本能够尽可能多地利用系统的可用内存,而32位版本只能使用至多4GB的内存(有些操作系统最多只有2GB)。
此外,还需要安装一些R包。有些章节中的例子需要使用额外的包。
有些章节中的示例需要其他软件和包才能运行。这些在相应章节中都有说明,还给出了它们的安装指南。
如果无法获得示例中需要的那些软件和工具,可以在Amazon Web Services (AWS)上运行这些示例。例如,第5章的例子需要支持CUDA的NVIDIA GPU,第9章的例子需要几种数据库系统,第10章的例子需要Hadoop。
使用Amazon账号登录(http://aws.amazon.con/)就可以使用AWS。如果还没有账号,就创建一个账号。创建账号是免费的,但是使用服务器、存储和其他资源是收费的。请咨询AWS网站了解你所在地区的最新收费情况。
全球不同区域都提供AWS服务。截至本书编写之时,AWS有8个服务区域,其中3个在美国,1个在欧洲,3个在亚太地区,还有1个在南美。任选一个区域,比如选择离你最近的或者价格最低的。进入AWS控制台(http://console.aws.amazon.com),在右上角选择区域。选好区域以后,使用本区域内的AWS资源实现书中的示例代码。
在配置任何计算资源之前,比如配置服务器或者Hadoop集群,首先需要登入服务器的密钥对。如果还没有AWS Elastic Cmpute Cloud (EC2)的密钥对,按照以下步骤生成密钥对:
1.进入AWS控制台,单击EC2。
2.单击左侧菜单的密钥对。
3.单击创建密钥对。
4.输入新密钥对的名字(例如mykey)。
5.一旦单击创建以后,私有密钥(例如mykey.pem)就会下载到本地电脑。
在Linux和Mac OS X上,修改私有密钥文件的权限,只允许读操作。具体操作是在终端窗口中对mykey.pem文件执行chmod 400。
本书的读者对象
如果你已经是一个R程序员,想要寻找提升代码性能的方法,那么这本书适合你。你需要熟悉并舒适地使用R,但却不需要很高深的技术。阅读本书需要的技能包括:
? 安装、升级和运行R
? 在R环境中安装和升级CRAN包
? 创建和操纵基本的数据结构,例如向量、矩阵、列表和数据框
? 使用和转换不同的R数据类型
? 执行算术、逻辑和其他基本的R操作
? 使用R控制语句,例如if、for、while和repeat
? 编写R函数
? 使用R Graphics画图
如果你是R新手,想学习如何编写R程序,有很多书籍、在线课程、教程和其他资源可供参考。用你喜欢的搜索引擎搜一下就可以了。
约定
本书中使用了很多格式的文本,以区分各种不同的信息。这里我们举例说明这些格式,并解释它们的含义。
正文中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、URL、用户输入以及Twitter用户名的格式是这样的,例如:“要编译这个函数,我们在编译包中使用cmpfun()函数。”
代码块像这样表示:
fibonacci_rec \<- function(n) {
if (n \<= 1) {
return(n)
}
return(fibonacci_rec(n - 1) + fibonacci_rec(n - 2))
}
新术语和重要词汇用黑体表示。屏幕上出现的词,例如,菜单或对话框,像这样表示:“在安装向导中一定要勾选‘制作安装包’和‘编辑系统路径’两个选项。”
警告或重要事项以这种方式表示。
技巧和提示像这样表示。
下载示例代码
你可以从http://www.broadview.com.cnbo“下载专区”,下载所有已购买的博文视点书籍的示例代码文件。
勘误表
虽然我们已经尽力谨慎地确保内容的准确性,但错误仍然存在。如果你发现了书中的错误,包括正文和代码中的错误,请告诉我们,我们会非常感激。这样,你不仅帮助了其他读者,也帮助我们改进后续的出版。如发现任何勘误,可以在博文视点网站相应图书的页面提交勘误信息。一旦你找到的错误被证实,你提交的信息就会被接受,我们的网站也会发布这些勘误信息。你可以随时浏览图书页面,查看已发布的勘误信息。
https://github.com/com/r-high-performance-programming/rhpp-2015
应为
https://github.com/r-high-performance-programming/rhpp-2015