您好,欢迎光临有路网!
R语言编程艺术
QQ咨询:
有路璐璐:

R语言编程艺术

  • 作者:(美) Norman Matloff 陈堰平 邱怡轩 潘岚锋 熊熹
  • 出版社:机械工业出版社
  • ISBN:9787111423140
  • 出版日期:2013年05月01日
  • 页数:303
  • 定价:¥69.00
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    R语言编程艺术(**计算机科学家兼统计学家撰写,Amazon五**畅销书,R语言领域公认经典著作)
    文章节选
    第1章
    快速入门
    如前言所述,R是一种针对统计分析和数据科学的功能全面的开源统计语言。它在商业、工业、政府部门、医药和科研等涉及数据分析的领域都有广泛的应用。
    本章将给出R的简单介绍——如何调用、能做什么以及使用什么文件。这里只介绍你在理解后面几章的例子时所需的基础知识,具体的细节将会在后面的章节中加以介绍。
    如果你的公司或大学允许,R可能已经安装在你的系统中。如果还没安装,请参考附录A中的安装指南。
    1.1 怎样运行R
    R可以在两种模式下运行:交互模式和批处理模式。常用的是交互模式。在这种模式下,你键入命令,R将显示结果,然后你再键入新的命令,如此反复进行操作。而批处理模式不需要与用户进行互动。这对于生产工作是非常有帮助的,比如一个程序必须定期重复运行,如每天运行一次,用批处理模式则可以让处理过程自动运行。
    1.1.1 交互模式
    在Linux或Mac的系统中,只需在终端窗口的命令行中键入R,就可以开始一个R会话。在Windows系统下,点击R图标来启动R。
    启动后显示的是欢迎语,以及R提示符,也就是>符号。屏幕的显示内容如下:
    现在就可以开始执行R命令了。这时候显示的窗口叫做R控制台。
    举个简单例子,考虑一个标准正态分布,其均值为0且方差为1。如果随机变量X服从这个标准正态分布,那么它的取值将以0为**,或正或负,平均值为0。现在要生成一个新的随机变量Y=|X|。因为我们已经取了**值,Y的值将不会以0为**,并且Y的均值也将是正值。
    下面来计算Y的均值。我们的方法基于模拟N(0,1)分布随机变量的取值:
    这行代码将会生成100个随机变量,计算它们的**值,然后计算它们**值的均值。
    标签[1]表示这行的**项是输出结果的**项。在这个例子中,输出结果只有一行(且只有一项),所以标签[1]显得有点多余。但是当输出结果有很多项会占据很多行时,这种标签会很有帮助。例如,输出结果有两行,且每行*多有6项,则第二行将会以标签[7]开头。
    在这里,输出结果有10个数值,举例来说,第二行的标签[7]可以让你快速判断出0.687701是输出结果的第8项。
    也可以把R的命令保存在文件里。通常,R代码文件都会有后缀.R或者.r。如果你创建一个名为z.R的文档,可以键入下面的命令来执行该文件中的代码:
    1.1.2 批处理模式
    有时候自动处理R会话能带来便利。例如,你可能希望运行一个用来绘图的R脚本,而不需要你亲自启动R来执行脚本,这时就要用批处理模式运行R。
    举个例子,文件z.R中是绘图的代码,内容如下:
    以#标记的部分是注释,它们会被R解释器忽略掉。注释的作用是以更易读的形式来提示代码的用途。
    下面一步步讲解前面代码的作用:
    调用pdf()函数告诉R我们想把创建的图形保存在PDF文件xh.pdf中。
    调用rnorm()函数(rnorm代表random normal)生成100个服从N(0,1)分布的随机变量。
    对这些随机变量调用hist()函数生成直方图。
    调用dev.off()函数关闭正在使用的图形“设备”,也就是本例中的xh.pdf文件。这就是实际上把文件写入磁盘的机制。
    我们可以自动运行上面的代码,而不用进入R的交互模式,只需要调用一条操作系统shell命令(例如通常在Linux系统中使用的$命令提示符)来调用R:
    用PDF阅读器打开保存的文件,可看到直方图(这里展示的只是简单的不加修饰的直方图,R可以生成更加复杂的图形),这表明上面的代码已执行。
    1.2 **个R会话
    用数字1、2、4生成一个简单的数据集(用R的说法就是“向量”),将其命名为x:
    R语言的标准赋值运算符是<-。也可以用=,不过并不建议用它,因为在有些特殊的情况下它会失灵。注意,变量的类型并不是固定不变的。在这里,我们把一个向量赋值给x,也许之后会把其他类型的值赋给它。我们会在1.4节介绍向量和其他类型。
    c表示“连接”(英文是concatenate)。在这里,我们把数字1、2、4连接起来。更**地说,连接的是分别包含三个数字的三个一元向量。这是因为可以把任何数字看作一元向量。
    接下来我们也可以这样做:
    这样就把q赋值为(1,2,4,1,2,4,8)(没错,还包括了x的副本)。
    我们来确认一下数据是不是真的在x中。要在屏幕上打印向量,只需直接键入它的名称。如果你在交互模式下键入某个变量名(或更一般的,某个表达式),R就会打印出变量的值(或表达式的值)。熟悉其他语言(比如Python)的程序员会觉得这个特性很熟悉。例如,输入下面的命令:
    果然,x包含数字1、2、4。
    向量的个别元素靠[ ]来访问。下面来看看如何打印x的第三个元素:
    正如在其他语言里一样,称选择器(这里的3)为索引(index)或者下标(subscript)。这些概念与ALGOL家族的语言(比如C和C++)类似。值得注意的是,R向量的元素的索引(下标)是从1开始的,而非0。
    提取子集是向量的一个非常重要的运算。下面是个例子:
    表达式x[2:3]代表由x的第2个至第3个元素组成的子向量,在这里也就是2和4组成的子向量。
    可以很容易求得本例中数据集的均值和标准差,如下:
    这里再次展示了在命令提示符下键入表达式来打印表达式的值。在**行,表达式调用的是函数mean(x)。函数的返回值会自动打印出来,而不需要调用R的print()函数。
    如果想把求得的均值保存在变量里,而不是打印在屏幕上,可以执行下面的代码:
    同样,我们来确认一下y是否真的包含x的均值:
    正如前面提到过的,我们用#来加上注释,如下:
    注释对于写有程序代码的文档是很有价值的,不过在交互式会话中注释也很有用,因为R会记录命令历史(1.6节会讨论这一点)。如果你保存了会话,之后又恢复会话,注释可以帮你回忆起当时在做什么。
    *后,我们从R的内置数据集(这些数据集是用来做演示的)里取出一个做些操作。你可以用下面的命令得出一份这些数据集的列表:
    其中一个数据集名为Nile,包含尼罗河水流量的数据。我们来计算这个数据集的均值和标准差:
    我们还可以画出数据的直方图:
    此时会弹出一个包含直方图的窗口,如图1-1所示。这幅图是极其简单的,不过R有各种可选的变量来修饰图形。例如,可以通过设定breaks变量来改变分组;调用hist(z,breaks=12)可以画出数据集z的带有12个分组的直方图;还可以创建更漂亮的标签、改变颜色,以及其他一些改变来创建更有信息量且吸引眼球的图形。当你更熟悉R之后,就有能力构建更复杂、绚丽多彩的精美图形。
    图1-1 尼罗河数据的简单展示
    *后调用q()函数以退出R(另一种方法是,在Linux中按下快捷键CTRL-D,或者在Mac中按下CMD-D):
    *后一句提示是询问你是否希望保存变量以待下次运行时继续处理。如果回答y,则所有对象将会在下次启动R的时候自动加载。这是非常重要的特性,特别是在处理庞大的数据集或很多数据集时。回答y也会保存会话的命令历史。1.6节会继续介绍如何保存工作空间(workspace)和命令历史。
    1.3 函数入门
    和大多数编程语言一样,R语言编程的核心是编写“函数”。函数就是一组指令的集合,用来读取输入、执行计算、返回结果。
    我们先定义一个函数oddcount(),以此简单介绍函数的用法。这个函数的功能是计算整数向量中奇数的个数。一般情况下,我们会用文本编辑器编写好函数代码并保存在文件中,不过在这个简单粗略的例子中,我们只需要在R的交互模式中一行行输入代码。接下来,我们还会在几个测试案例中调用这个函数:
    首先,我们告诉R想定义一个名为oddcount的函数,该函数有一个参数x。左花括号引出了函数体的开始部分。本例中,每行写一条R语句。
    在函数体结束前,R会用+作为提示符,而不是用平常的>,以提醒用户现在还在定义函数。(实际上,+是续行符号,不是新输入的提示符。)在你键入右花括号来结束函数体之后,R又恢复使用>提示符。
    定义完函数之后,本例调用了两次oddcount()函数。由于向量(1,3,5)中有3个奇数,所以调用oddcount(c(1,3,5))的返回值为3。(1,2,3,7,9)有4个奇数,所以第二次调用的返回值为4。
    注意,在R中取余数的求模运算符是%%,见上面例子中的注释。例如,38除以7的余数为3。
    例如,我们看看下面代码的运行结果:
    首先,把x[1]赋值给n,然后测试n是奇数还是偶数。如果像本例中那样,n是奇数,则计数变量k增加。接着把x[2]赋值给n,测试其是奇数还是偶数,以此类推,重复后面的过程。
    顺便说一句,C/C++程序员也许会把前面的循环写成这样:
    在这里,length(x)是x的元素个数。假设x有25个元素。则1:length(x)就是1:25,意思是依次取1、2、3、……、25。上面的代码也能奏效(除非x的长度为0),但是R语言编程的戒律之一就是要尽可能避免使用循环,如果不能避免,就要让循环更简洁。重新看看这段代码原来的版本:
    它更简单清晰,因为我们不需要使用length()函数和数组下标。
    在代码的末尾,我们使用了return语句。
    这条语句把k的计算结果返回给调用它的代码。不过,直接像下面这样写也可以达到目的:
    在没有显式调用return()时,R语言的函数会返回*后计算的值。不过,这个方法必须慎重使用,7.4.1节会详细讨论这个问题。
    在编程语言的术语里,x是函数oddcount()的形式参数(英文名称是formal argument或formal parameter,简称“形参”)。在前面例子**次调用函数时,c(1,3,5)称为实际参数(actual argument,简称“实参”)。这两个术语暗示了这样的事实:函数定义中的x只是个占位符,而c(1,3,5)才是在计算中实际用到的参数。同样,在第二次调用函数时,c(1,2,3,7,9)是实际参数。
    1.3.1 变量的作用域
    只在函数体内部可见的变量对这个函数来说是“局部变量”。在oddcount()中,k和n都是局部变量。它们在函数返回值以后就撤销了:
    需要注意的是,R函数中的形式参数是局部变量,这点非常重要。比如运行下面的命令:
    现在,假如oddcount() 的代码改变了x的值,则z的值不会改变。调用oddcount()之后,z的取值还和之前一样。在计算函数调用的取值时,R会把每个实际参数复制给对应的局部参数变量,继而改变那些在函数外不可见的变量的取值。本书第7章将详细介绍“作用域法则”,上面提到的这些只是简单的例子。
    全局变量是在函数之外创建的变量,在函数内部也可以访问。下面是个例子:
    这里的y就是全局变量。
    可以用R的“超赋值运算符”(superassignment operator)<<-在函数内部给全局变量赋值,将在第7章详细介绍。
    1.3.2 默认参数
    R语言也经常用到“默认参数”。考虑下面这样的函数定义:
    如果程序员没有在函数调用时给y设定一个值,则y将初始化为2。同理,z也有默认值TRUE。
    现在考虑下面的调用:
    这里,数值12是x的实际参数,而且我们接受了y的默认值2,不过我们覆盖了z的默认值,将其设定为FALSE。
    上面这个例子也表明:与其他编程语言一样,R语言也有“布尔类型”,包括TRUE和FALSE两个逻辑值。
    注意 R语言允许TRUE和FALSE缩写为T和F。不过,如果你有名为T或F的变量,那么为了避免麻烦还是*好不要使用这样的缩写形式。
    1.4 R语言中一些重要的数据结构
    R有多种数据结构。本节将简单介绍几种常用的数据结构,使读者在深入细节之前先对R语言有个大概的认识。这样,读者至少可以开始尝试一些很有意义的例子,即使这些例子背后更多的细节还需要过一段时间才能揭晓。
    1.4.1 向量,R语言中的战斗机
    向量类型是R语言的核心。很难想象R语言代码或者R交互式会话可以一点都不涉及向量。
    向量的元素必须属于某种“模式”(mode),或者说是数据类型。一个向量可以由三个字符串组成(字符模式),或者由三个整数元素组成(整数模式),但不可以由一个整数元素和两个字符串元素组成。
    第2章将详细介绍向量。
    标量
    标量,或单个的数,其实在R中并不存在。正如前面提到的,单个的数实际上是一元向量。请看下面的命令:
    前面提到过,符号[1]表示后面这行的开头是向量的**个元素,本例中为x[1]。所以可以看出,R语言确实把x当做向量来看,也就是只有一个元素的向量。
    1.4.2 字符串
    字符串实际上是字符模式(而不是数值模式)的单元素向量。
    **个例子创建了数值向量x,也就是数值模式的。然后创建了两个字符模式的向量:y是单元素(也就是一个字符串)的向量,z由两个字符串组成。
    R语言有很多种字符串操作函数。其中有些函数可以把字符串连接到一起或者把它们拆开,比如下面的两个函数:
    第11章将会介绍字符串的细节。
    1.4.3 矩阵
    R中矩阵的概念与数学中一样:矩形的数值数组。从技术层面说,矩阵是向量,不过矩阵还有两个附加的属性:行数和列数。下面是一些例子:
    首先,使用函数rbind()(rbind是row bind的缩写,意思是按行绑定)把两个向量结合成一个矩阵,这两个向量是矩阵的行,并把矩阵保存在m中(另一个函数cbind()把若干列结合成矩阵)。然后键入变量名,我们知道这样可以打印出变量,以此确认生成了我们想要的矩阵。*后,计算向量(1,1)和m的矩阵积。你也许已经在线性代数课程中学过矩阵乘法运算,在R语言中它的运算符是*。
    矩阵使用双下标作为索引,这点与C/C++非常相似,只不过下标是从1开始,而不是0。
    R语言的一个非常有用的特性是,可以从矩阵中提取出子矩阵,这与从向量中提取子向量非常相似。例子如下:
    第3章将会详细介绍矩阵。
    1.4.4 列表
    和R语言的向量类似,R语言中的列表也是值的容器,不过其内容中的各项可以属于不同的数据类型(C/C++程序员可以把它与C语言的结构体做类比)。可以通过两部分组成的名称来访问列表的元素,其中用到了美元符号$。下面是个简单的例子:
    表达式x$u指的是列表x中的组件u。列表x还包含另一个组件v。
    列表的一种常见用法是把多个值打包组合到一起,然后从函数中返回。这对统计函数特别有用,因为统计函数
    目录
    译者序
    前 言
    致 谢
    第1章 快速入门
    1.1 怎样运行R
    1.1.1 交互模式
    1.1.2 批处理模式
    1.2 **个R会话
    1.3 函数入门
    1.3.1 变量的作用域
    1.3.2 默认参数
    1.4 R语言中一些重要的数据结构
    1.4.1 向量,R语言中的战斗机
    1.4.2 字符串
    1.4.3 矩阵
    1.4.4 列表
    1.4.5 数据框
    1.4.6 类
    1.5 扩展案例:考试成绩的回归分析
    1.6 启动和关闭R
    1.7 获取帮助
    1.7.1 help()函数
    1.7.2 example()函数
    1.7.3 如果你不太清楚要查找什么
    1.7.4 其他主题的帮助
    1.7.5 批处理模式的帮助
    1.7.6 互联网资源
    第2章 向量
    2.1 标量、向量、数组与矩阵
    2.1.1 添加或删除向量元素
    2.1.2 获取向量长度
    2.1.3 作为向量的矩阵和数组
    2.2 声明
    2.3 循环补齐
    2.4 常用的向量运算
    2.4.1 向量运算和逻辑运算
    2.4.2 向量索引
    2.4.3 用:运算符创建向量
    2.4.4 使用seq()创建向量
    2.4.5 使用rep()重复向量常数
    2.5 使用all()和any()
    2.5.1 扩展案例:寻找连续出现1的游程
    2.5.2 扩展案例:预测离散值时间序列
    2.6 向量化运算符
    2.6.1 向量输入,向量输出
    2.6.2 向量输入,矩阵输出
    2.7 NA与NULL值
    2.7.1 NA的使用
    2.7.2 NULL的使用
    2.8 筛选
    2.8.1 生成筛选索引
    2.8.2 使用subset()函数筛选
    2.8.3 选择函数which()
    2.9 向量化的ifelse()函数
    2.9.1 扩展案例:度量相关性
    2.9.2 扩展案例:对鲍鱼数据集重新编码
    2.10 测试向量相等
    2.11 向量元素的名称
    2.12 关于c()的更多内容
    第3章 矩阵和数组
    3.1 创建矩阵
    3.2 一般矩阵运算
    3.2.1 线性代数运算
    3.2.2 矩阵索引
    3.2.3 扩展案例:图像操作
    3.2.4 矩阵元素筛选
    3.2.5 扩展案例:生成协方差矩阵
    3.3 对矩阵的行和列调用函数
    3.3.1 使用apply()函数
    3.3.2 扩展案例:寻找异常值
    3.4 增加或删除矩阵的行或列
    3.4.1 改变矩阵的大小
    3.4.2 扩展案例:找到图中距离*近的一对端点
    3.5 向量与矩阵的差异
    3.6 避免意外降维
    3.7 矩阵的行和列的命名问题
    3.8 高维数组
    第4章 列表
    4.1 创建列表
    4.2 列表的常规操作
    4.2.1 列表索引
    4.2.2 增加或删除列表元素
    4.2.3 获取列表长度
    4.2.4 扩展案例:文本词汇索引
    4.3 访问列表元素和值
    4.4 在列表上使用apply系列函数
    4.4.1 lapply()和sapply()的使用
    4.4.2 扩展案例:文本词汇索引(续)
    4.4.3 扩展案例:鲍鱼数据
    4.5 递归型列表
    第5章 数据框
    5.1 创建数据框
    5.1.1 访问数据框
    5.1.2 扩展案例:考试成绩的回归分析(续)
    5.2 其他矩阵式操作
    5.2.1 提取子数据框
    5.2.2 缺失值的处理
    5.2.3 使用rbind()和cbind()等函数
    5.2.4 使用apply()
    5.2.5 扩展案例:工资研究
    5.3 合并数据框
    5.4 应用于数据框的函数
    5.4.1 在数据框上应用lapply()和sapply()函数
    5.4.2 扩展案例:应用Logistic模型
    5.4.3 扩展案例:学习中文方言的辅助工具
    第6章 因子和表
    6.1 因子与水平
    6.2 因子的常用函数
    6.2.1 tapply函数
    6.2.2 split()函数
    6.2.3 by()函数
    6.3 表的操作
    6.3.1 表中有关矩阵和类似数组的操作
    6.3.2 扩展案例: 提取子表
    6.3.3 扩展案例:在表中寻找频数*大的单元格
    6.4 其他与因子和表有关的函数
    6.4.1 aggregate()函数
    6.4.2 cut()函数
    第7章 R语言编程结构
    7.1 控制语句
    7.1.1 循环
    7.1.2 对非向量集合的循环
    7.1.3 if-else结构
    7.2 算术和逻辑运算符及数值
    7.3 参数的默认值
    7.4 返回值
    7.4.1 决定是否显式调用return ()
    7.4.2 返回复杂对象
    7.5 函数都是对象
    7.6 环境和变量作用域的问题
    7.6.1 顶层环境
    7.6.2 变量作用域的层次
    7.6.3 关于ls()的进一步讨论
    7.6.4 函数(几乎)没有副作用
    7.6.5 扩展案例:显示调用框的函数
    7.7 R语言中没有指针
    7.8 向上级层次进行写操作
    7.8.1 利用超赋值运算符对非局部变量进行写操作
    7.8.2 用assign()函数对非局部变量进行写操作
    7.8.3 扩展案例:用R语言实现离散事件仿真
    7.8.4 什么时候使用全局变量
    7.8.5 闭包
    7.9 递归
    7.9.1 Quicksort的具体实现
    7.9.2 拓展举例:二叉查找树
    7.10 置换函数
    7.10.1 什么是置换函数
    7.10.2 扩展案例:可记录元素修改次数的向量类
    7.11 写函数代码的工具
    7.11.1 文本编辑器和集成开发环境
    7.11.2 edit()函数
    7.12 创建自己的二元运算符
    7.13 匿名函数
    第8章 数学运算与模拟
    8.1 数学函数
    8.1.1 扩展例子:计算概率
    8.1.2 累积和与累积乘积
    8.1.3 *小值和*大值
    8.1.4 微积分
    8.2 统计分布函数
    8.3 排序
    8.4 向量和矩阵的线性代数运算
    8.4.1 扩展示例:向量叉积
    8.4.2 扩展示例:确定马尔科夫链的平稳分布
    8.5 集合运算
    8.6 用R做模拟
    8.6.1 内置的随机变量发生器
    8.6.2 重复运行时获得相同的随机数流
    8.6.3 扩展案例:组合的模拟
    第9章 面向对象的编程
    9.1 S3类
    9.1.1 S3泛型函数
    9.1.2 实例:线性模型函数lm()中的OOP
    9.1.3 寻找泛型函数的实现方法
    9.1.4 编写S3类
    9.1.5 使用继承
    9.1.6 扩展示例:用于存储上三角矩阵的类
    9.1.7 扩展示例:多项式回归程序
    9.2 S4类
    9.2.1 编写S4类
    9.2.2 在S4类上实现泛型函数
    9.3 S3类和S4类的对比
    9.4 对象的管理
    9.4.1 用ls()函数列出所有对象
    9.4.2 用rm()函数删除特定对象
    9.4.3 用save()函数保存对象集合
    9.4.4 查看对象内部结构
    9.4.5 exists()函数
    第10章 输入与输出
    10.1 连接键盘与显示器
    10.1.1 使用scan()函数
    10.1.2 使用readline()函数
    10.1.3 输出到显示器
    10.2 读写文件
    10.2.1 从文件中读取数据框或矩阵
    10.2.2 读取文本文件
    10.2.3 连接的介绍
    10.2.4 扩展案例:读取PUMS普查数据
    10.2.5 通过URL在远程计算机上访问文件
    10.2.6 写文件
    10.2.7 获取文件和目录信息
    10.2.8 扩展案例:多个文件内容的和
    10.3 访问互联网
    10.3.1 TCP/IP概述
    10.3.2 R中的socket
    10.3.3 扩展案例:实现R的并行计算
    第11章 字符串操作
    11.1 字符串操作函数概述
    11.1.1 grep()
    11.1.2 nchar()
    11.1.3 paste()
    11.1.4 sprintf()
    11.1.5 substr()
    11.1.6 strsplit()
    11.1.7 regexpr()
    11.1.8 gregexpr()
    11.2 正则表达式
    11.2.1 扩展案例:检测文件名的后缀
    11.2.2 扩展案例:生成文件名
    11.3 在调试工具edtdbg中使用字符串工具
    第12章 绘图
    12.1 创建图形
    12.1.1 基础图形系统的核心:plot()函数
    12.1.2 添加线条:abline()函数
    12.1.3 在保持现有图形的基础上新增一个绘图窗口
    12.1.4 扩展案例:在一张图中绘制两条密度曲线
    12.1.5 扩展案例:进一步考察多项式回归
    12.1.6 添加点:points()函数
    12.1.7 添加图例:legend()函数
    12.1.8 添加文字:text()函数
    12.1.9 **定位:locator()函数
    12.1.10 保存图形
    12.2 定制图形
    12.2.1 改变字符大小:cex选项
    12.2.2 改变坐标轴的范围:xlim和ylim选项
    12.2.3 添加多边形:polygon()函数
    12.2.4 平滑散点:lowess()和loess()函数
    12.2.5 绘制具有显式表达式的函数
    12.2.6 扩展案例:放大曲线的一部分
    12.3 将图形保存到文件
    12.3.1 R图形设备
    12.3.2 保存已显示的图形
    12.3.3 关闭R图形设备
    12.4 创建三维图形
    第13章 调试
    13.1 调试的基本原则
    13.1.1 调试的本质:确认原则
    13.1.2 从小处着手
    13.1.3 模块化的、自顶向下的调试风格
    13.1.4 反漏洞
    13.2 为什么要使用调试工具
    13.3 使用R的调试工具
    13.3.1 利用debug()和browser()函数进行逐步调试
    13.3.2 使用浏览器命令
    13.3.3 设置断点
    13.3.4 使用trace()函数进行追踪
    13.3.5 使用traceback()和debugger()函数对崩溃的程序进行检查
    13.3.6 扩展案例:两个完整的调试会话
    13.4 更方便的调试工具
    13.5 在调试模拟数据的代码时请确保一致性
    13.6 语法和运行时错误
    13.7 在R上运行GDB
    第14章 性能提升:速度和内存
    14.1 编写快速的R代码
    14.2 可怕的for循环
    14.2.1 用向量化提升速度
    14.2.2 扩展案例:在蒙特卡罗模拟中获得更快的速度
    14.2.3 扩展案例:生成幂次矩阵
    14.3 函数式编程和内存问题
    14.3.1 向量赋值问题
    14.3.2 改变时拷贝
    14.3.3 扩展案例:避免内存拷贝
    14.4 利用Rprof()来寻找代码的瓶颈
    14.4.1 利用Rprof()来进行监视
    14.4.2 Rprof()的工作原理
    14.5 字节码编译
    14.6 内存无法装下数据怎么办
    14.6.1 分块
    14.6.2 利用R软件包来进行内存管理
    第15章 R与其他语言的接口
    15.1 编写能被R调用的C/C++函数
    15.1.1 R与C/C++交互的预备知识
    15.1.2 例子:提取方阵的次对角线元素
    15.1.3 编译和运行程序
    15.1.4 调试R/C程序
    15.1.5 扩展案例:预测离散取值的时间序列
    15.2 从Python调用R
    15.2.1 安装RPy
    15.2.2 RPy语法
    第16章 R语言并行计算
    16.1 共同外链问题
    16.2 snow包简介
    16.2.1 运行snow代码
    16.2.2 分析snow代码
    16.2.3 可以获得多少倍的加速
    16.2.4 扩展案例:K均值聚类
    16.3 借助于C
    16.3.1 利用多核机器
    16.3.2 扩展案例:利用OpenMP解决共同外链问题
    16.3.3 运行OpenMP代码
    16.3.4 OpenMP代码分析
    16.3.5 其他OpenMP指令
    16.3.6 GPU编程
    16.4 普遍的性能考虑
    16.4.1 开销的来源
    16.4.2 简单并行程序,以及那些不简单的
    16.4.3 静态和动态任务分配
    16.4.4 软件炼金术:将一般的问题转化为简单并行问题
    16.5 调试R语言并行计算的代码
    附录A 安装R
    附录B 安装和使用包

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外