《R语言初学指南》一2.3 找到R脚本中的错误

2.3 找到R脚本中的错误

R语言初学指南
复杂项目中的R脚本会非常长。即使是R专家,也很少能一次性将其编写正确。脚本中的所有错误都是通过调试来修改的。

在脚本中称追踪错误或“bug”为“调试”。调试包括一些适用性检测工作。

下面在脚本中故意制造一个bug,由此来练习如何调试。首先来做一些清理工作。使控制台成为活动窗口,并输入下列命令:

>objects()

按照惯例,这里在展示控制台中的命令时,依然在其前面显示R提示符(“>”),但要记住,在控制台中不需要输入该提示符。不要忘记命令末尾的括号。在运行该命令后,就可在工作区内看到一串已用R命令建立好的“对象”:

[1] "a"       "b"       "k"       "kill.rate"  
[5] "m"       "moose.density"

这些对象已存储在R中,可供日后调用。现在输入下列命令:

>rm(a,b,k,kill.rate,m,moose.density)
>a

哎?找不到对象a了,其他几个对象也找不到。命令rm()表示“移除”,它会删除括号中的所有对象。由于用户可能会忘记之前在R会话中建立的对象,而导致后面的计算出现错误,这时命令objects()和rm()就会非常有用。

现在开始通过制造bug来搞破坏!回到R编辑器中,将脚本的第一个命令moose.density的首字母改为大写字母M,然后重新运行脚本。这时会弹出图形窗口,但其中没有图形显示——出现错误了。看一下控制台,找到与下列语句相似的内容(在不同版本的R中,出现的错误信息可能会稍有不同):

> Moose.density=c(.17,.23,.23,.26,.37,.42,.66,.80,1.11,1.30,1.37,
+ 1.41,1.73,2.49)
> kill.rate=c(.37,.47,1.90,2.04,1.12,1.74,2.78,1.85,1.88,1.96,
+ 1.80,2.44,2.81,3.75)
> plot(moose.density,kill.rate,type="p")
Error in plot(moose.density, kill.rate, type = "p") :
 object 'moose.density' not found
> m=2.5*(0:100)/100
> a=3.37
> b=0.47
> k=a*m/(b+m)
> points(m,k,type="l")
Error in plot.xy(xy.coords(x, y), type = type, ...) :
 plot.new has not been called yet

控制台中重现了脚本,其中还包含两条错误信息。这里有两点非常重要,需要注意。

首先,尽管没有修改plot()语句和points()语句,但它们下面出现了错误信息,而实际上有错误(大写字母M)的语句却没有任何提示。在脚本中,错误可以影响下面一系列命令出错。这里,定义向量Moose.density的命令是一个在R中完全正确的语句,它在R的内存中建立了对象Moose.density以便日后调用,在控制台中使用object()命令即可看到这一对象。问题出在绘图语句上。plot()语句使用的向量moose.density并不存在,故plot()语句无法进行绘图。接着由于没有元素可以添加到图形中,points()语句也就无法执行。

其次,在通常情况下,若可以定位并修正某个错误,则后面的一些错误也会被修正。因此,建议用户在策略上,要从上到下一个一个地修改错误。此外,在每修改完一个语句或一小部分R脚本后,就对它们进行测试,以防修改本身包含错误并对后续的语句产生影响。不过,即使再小心谨慎,也几乎没有很长的R脚本可在第一次就能完美地运行出来。

若要在脚本中检测并定位不明显的错误,需要对脚本从头开始进行一系列搜索及实验。在空白的工作区中,可选中代码并运行这部分脚本,从而很方便地完成这一任务。读者可以试一下:首先像刚才一样,在控制台中删除工作区内的所有对象,然后在R编辑器中选中第一个命令,使其高亮。在“Edit”的下拉菜单中(在微软的Windows中,若对高亮区点击右键,会弹出菜单),找到并点击“Run line selection”选项,即可运行脚本中的第一行命令。在控制台中检查一下,这条命令建立了哪些对象。

若该命令的运行情况与预期一致,则继续运行下一条语句。单独选中并运行下一条语句,然后再连同脚本中前面的语句一起运行一遍。

当检查到绘图语句时,错误信息就会出现。绘图命令在寻找一个不存在的对象。若在之前的检查中没有发现Moose.density与moose.density是两个不同的对象,这时也许能清晰地发现这一点。R的用户应当时刻注意变量名的大小写以及拼写错误问题,这是错误的一个主要来源。

找到并改正大写的M,然后运行脚本,即可成功绘图。但是等一下:过早地认为这是一个完美的脚本可能会导致失败。有时即使脚本可以很好地运行,其运行结果也可能错得离谱。当计算本身有概念性的错误时,这种情况就会发生。R会精确完成用户的指令,且当用户的指令有错误时,R也会按错误指令忠实地运行完成。

数据输入是否正确?作者在输入本章数据时,是否与第1章保持一致了呢?要想有效地使用R,仔细一点儿总不会错。

时间: 2024-07-30 05:29:50

《R语言初学指南》一2.3 找到R脚本中的错误的相关文章

《R语言初学指南》一导读

前 言 R语言初学指南 R是一个用于科学绘图和计算的计算机软件.它由统计学家和科学家编写并维护,以便科学家们在工作中使用.它易于使用,且有强大的功能.R正在科学和技术领域迅速传播,并为展示科学出版物中的图形数据建立标准. R是免费的开源软件,可在大多数计算机(俗称电脑)上安装.它支持Windows.Mac和Unix/Linux操作系统.人们可从R语言网站(http://www.r-project.org/)方便地下载并安装R软件. 本书是为高中生.大学生,以及其他想要学习怎样使用R的人编写的.借

《R语言初学指南》一2.6 本章小结

2.6 本章小结 R语言初学指南在上例中,由于向量t.principal.paid.month.t.interest.paid.month.t及principal.remaining都包含360(或m)个元素,它们在控制台显示时会出现大片的数字.若能将它们组织成某种表格,使之能更好地呈现出来就好了.同样,还需要几种能将大型数据表格输入到R中的方法.在第5章中将会讨论数据的输入及输出. 在之前给出的脚本中,函数sum()可能会令人好奇,它可对任一向量中的所有元素求和.R中有很多这样的函数,在第3章

《R语言初学指南》一1.3 图形

1.3 图形 R语言初学指南准备好用R进行绘图了吗?如果还没有感受到R的强大,就请做好准备吧.假设你有1000美元的积蓄,并希望存到将来使用,比如用来买房子.现在有银行提供一份年利率为5%的存单(certificate of deposit,CD),并且每年的利息会计入本金.通过用R绘图,可看到这样的结论:这份存单可让你有机会更好地利用原有的积蓄.图中会显示一年后.两年后,一直到十年后,存单中的实际金额. 由于每年5%的利息会计入本金,在计算下一年存单中的金额时,要用(1+0.05)乘以当年的金

《R语言初学指南》一2.2 运行R脚本

2.2 运行R脚本 R语言初学指南现在可以开始运行脚本了!在R编辑器窗口成为当前活动窗口的情况下,点击任务栏中的"Edit",在下拉菜单中可看到常用的文本编辑选项,如"Undo"."Cut"及"Copy"等.找到并点击"Run all". 若在Unix或Linux系统中使用R,有两种方法可用来运行脚本:(1)将文本编辑器中的脚本全部复制,再粘贴到控制台的提示符处,即可运行该脚本.这种方法与在控制台中一行行输

《R语言初学指南》一第2章 R脚本

第2章 R脚本 R语言初学指南 如果只是进行一项小的计算任务,也必须在控制台窗口中输入许多行代码,则会令人感到心烦.一旦出现错误,就要将某行,甚至更多行全部重新输入.例如,在第1章曾使用三个R命令绘图: >moose.density=c(.17,.23,.23,.26,.37,.42,.66,.80,1.11,1.30,1.37, + 1.41,1.73,2.49) >kill.rate=c(.37,.47,1.90,2.04,1.12,1.74,2.78,1.85,1.88,1.96, +

《R语言初学指南》一1.4 实际案例

1.4 实际案例 R语言初学指南 前文中选取的例子仅仅是用来做简单说明,在实际生活中,对存单投资的重要性很难超越现金的重要性.在本书的一些章节中,会分析更加复杂的实际案例,这需要一步步地用R中的计算及绘图工具进行综合分析. 下面介绍生态学的数据绘图.这是一个科学上的实际案例,而不是演示案例,因此先介绍一些背景知识. 生态学是生物学的一个分支学科,是研究生物体与其周围环境相互关系的科学.几十年来,生态学家一直在关注捕食者与猎物的关系,这种关系是对社会有重要意义的问题.例如,在美国的部分地区,有关狼

《R语言初学指南》一第1章 介绍:开始使用R1.1 R教程

第1章 介绍:开始使用R R语言初学指南R是一种用来进行科学绘图和计算的计算机程序. R由科学家编写,供他们在工作中使用. R具有非常强大的功能,且十分易于使用. R是免费的. 记得之前提到过R是免费的吗? R有不同的版本,适用于各种操作系统,比如,Windows,Mac,甚至包括Unix/Linux系统.如果读者在家有台能联网的电脑,便可以从这个网站http://www.r-project.org/下载并安装R. R的安装比电脑游戏还要简单(若需安装帮助,可以参考附录A). 安装R之后,会在电

《R语言初学指南》一2.7 计算任务

2.7 计算任务 R语言初学指南下面是第1章中的部分任务.这里的任务是:为下列R中的计算问题建立R脚本.希望你能同意将完成第1章中任务的R命令都用R脚本保存下来,以便日后使用.在完成第1章任务后将命令保存下来了吧?这对完成下面的任务很有帮助的! 2-1 计算下列各表达式: 2-2 在更长的时间跨度下,再画一遍投资方程图(计算存单中的金额).这次将时间延长到多年(50年?)后的将来,比如说一直到65岁退休那年.得到的图形是不是很令人惊讶?这确实让人很难抉择:要么现在去买一条设计新颖的牛仔裤,要么存

《R语言初学指南》一1.6 计算任务

1.6 计算任务 R语言初学指南可用已学到的R知识来完成下面的计算题.最初可能会遇到些小麻烦,但通过实践.试验.犯错并与同学讨论,就可掌握如何操作R.记住,如果输入了错误的命令,只要再输入一遍正确的即可,R会覆盖之前的值.在命令运行成功并得到结果后,将其复制并保存在一个文本文件中,以便日后调用. 1-1 计算下列各表达式: 1-2 在更长的时间跨度下,再画一遍投资方程图(计算存单中的金额).这次将时间延长到多年(50年?)后的将来,比如说一直到65岁退休那年.得到的图形是不是很令人惊讶?这确实让