本节书摘来自异步社区《R语言初学指南》一书中的第2章,第2.3节,作者【美】Brian Dennis(布莱恩·丹尼斯),更多章节内容可以访问云栖社区“异步社区”公众号查看

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,仔细一点儿总不会错。

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

  1. 《R语言初学指南》一2.8 参考文献

    本节书摘来自异步社区<R语言初学指南>一书中的第2章,第2.8节,作者[美]Brian Dennis(布莱恩·丹尼斯),更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  2. R语言 echarts4r 不显示图形_9本R语言书,从入门到进阶都在这里了!

    程序猿们都知道,人民邮电出版社有很多关于R语言的书,今天小编带大家了解一下R,从入门到进阶,都在这了. 最新上架 R语言之书:编程与统计 作者:[新西兰]蒂尔曼·M. 戴维斯(Tilman M. Da ...

  3. R语言 echarts4r 不显示图形_9本R语言书,从入门到进阶都在这了

    近期异步社区最新上架了两本R语言,小编带大家了解一下R语言书,从入门到进阶,都在这了.因为夏季即将到来,小编字体用了绿色,嘿嘿!最新上架 R语言之书:编程与统计 作者:[新西兰]蒂尔曼·M. 戴维斯( ...

  4. python调用r语言加载包错误_Python中调用R语言包指南.docx

    Python中调用R语言包指南R语言是非常强大的做统计分析和建模方面的开源软件,它有非常丰富的统计软件包,做统计可以说只有你想不到的,没有R办不到的.Python又是当下最流行的编程软件之一,Pyth ...

  5. (一)R语言入门指南——数据分析的第一步

    注:本博客旨在分享个人学习心得,有不规范之处请多多包涵! 目录 R语言 数值与逻辑运算符 变量类型与赋值 逻辑判定与循环 结束语 R语言 简单来说,R语言是一个免费开源.数据分析和可视化功能强大的编程 ...

  6. R语言mad(c(1 2 3 4)),R语言--数据管理-R语言实战笔记-第四五章

    第四.第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的数据样本,对的,"合适",做到合适可不是一个简单的事情 ...

  7. R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame)、添加标题、副标题

    R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame).添加标题.副标题. ...

  8. R语言ggplot2可视化散点图、移除可视化图像中的网格线(remove gridlines)

    R语言ggplot2可视化散点图.移除可视化图像中的网格线(remove gridlines) 目录 R语言ggplot2可视化散点图.移除可视化图像中的网格线(remove gridlines)

  9. R语言ggplot2可视化散点图、移除可视化图像中的多余的图例信息、使用scale_size函数移除数据点大小的图例(legend)

    R语言ggplot2可视化散点图.移除可视化图像中的多余的图例信息.使用scale_size函数移除数据点大小的图例(legend) 目录

最新文章

  1. python3项目-终于找到python3项目实战教程
  2. 详解京东商城智能对话系统(生成+检索)
  3. 虚拟局域网vlan实验报告_自动化已非原来的自动化:看虚拟局域网技术应用到罗克韦尔的DCS...
  4. 从零开始用好 Maven : 从 Hello World 到日常使用
  5. d3js mysql_D3js技术文档 可视化展现
  6. 在并发情况下,Elasticsearch 如果保证读写一致?
  7. 萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks...
  8. 重庆文件服务器,重庆filecoin服务器
  9. 如何 给给软件开发 添加 代理_如何从“菜鸟码农”变成“一线架构师”?
  10. 电脑硬件检测软件排名列前茅:试试整合了当下最好的硬件检测软件的图吧工具箱吧 | 图吧工具箱在哪里下载
  11. Android 获取时间戳
  12. 电子电路基础 (12)——功率放大电路原理分析
  13. 年底个人安全注意事项
  14. python 追加写文件_python怎么追加写入文件
  15. uview基本配置,在HubildX中如何配置uni-app相关的组件
  16. FlashBuilder精选插件
  17. sis防屏蔽程序_智能化弱电工程屏蔽机房基础知识
  18. 网站收录前期如何优化
  19. UCOS III 任务堆栈理解
  20. 推荐系统:协同过滤及其利弊

热门文章

  1. 自定义android控件EditText 自定义边框 背景
  2. 体素科技:2018年,算法驱动下的医学影像分析进展
  3. 工信部部长苗圩于CITE发表致辞,指引三个方向推动国内电子信息产业持续发展...
  4. ORA-12638: 身份证明检索失败 的解决办法
  5. 《易学C++(第2版)》——2.4 Visual C++ 6.0的使用
  6. Linux-PAM PAM-MySQL的总结
  7. JPA学习(6)JPQL
  8. Visual Studio 2015 速递(4)——高级特性之移动开发
  9. Unity 中的协同程序
  10. urlencode urldecode