如何在Rstudio中debug

        本人不是R的重度使用者,作为菜鸟记录一下使用Rstudio的使用感想。

      我的使用场景主要是生成数据建模报告。R notebook支持Markdown,而且保存成html格式可以保留图表的交互性,代码写完了,报告也完成了,不需要再转移到PPT或者在Word里面纠结贴图和表格的格式。这一点是我离不开R notebook的原因。

        不过在刚接触R的时候很纠结的一点是不熟悉Rstudio中的debug模式。实际上Rstudio提供很人性化的debug方式。当运行出现错误时,在报错区域的右上角有追踪的按钮,如果报错信息不够清晰的话,可追踪到具体出错的位点。


       如下图,错误信息是逐层显示的。最下面的第一行是在console中运行出错的语句。这里调用了自定义函数lasso_analysis,函数定义保存在蓝色字标注的文件中,出错位置在该文件的第76行。

点击蓝色字,打开对应文件并在错误行加深背景显示


如果还不清楚出错原因或者希望追踪此时的局部变量情况,在希望停止的行号前单击左键加入断点。对应地,在变量窗口处,已加载的函数lasso_analysis()前也会出现存在断点的提示。


此时再运行lasso_analysis()这个函数,会在运行76行之前停止,Console窗口上新增debug工具条,从左到右分别是运行下一行,进入子函数,完成所在循环体,运行至下一个断点以及终止进程。此时变量窗口显示的是函数内的局部变量。



一般来说,我会倾向于将较大段的代码封装成函数,并把一份报告中使用的所有函数以及调用包的library命令放在一个R script文件中。在R notebook的开头加入source语句进行函数加载。由于一些数据读入和检查的代码在不同的项目中重复利用率很高,这样保存的方式也比较方便代码转移,报告中的代码段也比较简洁。


目前对于 R 自定义函数中全局变量和局部变量的定义还不是很清楚。在MATLAB或C中如果不传入或者外部声明全局,在函数内是无法调用外部变量的,但是R似乎只要不与内部变量重名都没有什么取值的问题。实际上R有环境管理的一套体系,研究过后再来记录。