当我们谈论R中的调试时, 在python和其他编程IDE上工作的人会感到有些负面。 R本身有一些有用的功能, 例如traceback()和browser()以及RStudio中的交互式工具, 但是不知何故, 内置功能无法解决一些限制。在这种情况下, 我们会陷入困境, 这需要更多的时间来解决。
然后到达调试程序包, 你可以在编写复杂的方法和循环时使用该程序包, 该程序包向你显示运行时变量条目, 并帮助你在更短的时间内解决该错误。尽管你需要为代码输入和调试器的动作上的点进行预计划。与在执行时以困难的方式解决问题相比, 值得花一些时间。
Rstudio中的调试方面
Rstudio提供了一个用于调试的交互式平台, 使检测复杂功能中的错误变得更加容易。
【R Rstudio使用debugr进行调试】让我们在下面绘制一个函数并应用这些方法。
f <
-函数(a)g(a)g <
-函数(b)h(b)h <
-函数(c)i(c)i <
-函数(d)j(d)j <
-函数)”
a”
+ e
f(10)
文章图片
在这里, 你可以浏览到不同的函数以迭代方式检查代码。你浏览的功能将显示其代码。
文章图片
文章图片
你可以使用traceback查看由单个函数进行的函数调用的流程。
错误调试
在Rstudio中执行代码时, 如果出现错误, 则Rstudio在其交互式控制台中提供了两种方法来解决该问题。一种是回溯, 向你显示函数调用的流程, 另一种是使用调试重新运行。如果你选择使用调试重新运行, Rstudio将带你进入交互式调试器会话, 该会话还将在发生错误的地方暂停执行。
在编辑器中时, 你可以将其与
文章图片
或使用键盘:
文章图片
, n:此按钮将带你进入下一步。
文章图片
或s:与下一个类似, 但不是下一步, 而是进入下一个功能。
文章图片
或f:完成当前循环或函数的执行。
文章图片
, c:退出交互式调试。
文章图片
, Q:停止调试, 终止函数, 然后返回全局工作区。
在任意代码中设置断点
Rstudio会在错误时进入交互式控制台, 但是你可以使用Rstudio断点或browser()在任意代码位置输入。
可以通过几种方法添加断点:
- 你可以单击代码行左侧。
- 你可以在代码行上按Shift + F9。
- 你可以在需要停止执行的位置添加browser()。
有关这些调试方法的详细信息, 请访问此处。
现在让我们谈谈包调试器。
调试器支持较简单的调试方面, 如果你参与较少的调试工作, 则很容易理解。调试器具有一些简单的功能, 它们是:
- debugr_isActive:-打开和关闭调试模式。
- debugr_switchOff:-打开和关闭调试模式。
- debugr_switchOn:-打开和关闭调试模式。
- dwatch:-在运行时打印调试输出。
对于任何调试功能, 都需要打开调试器的调试功能, 这很容易通过debug_switchOn()完成。你可以将dwatch()函数放在要调试代码的任何位置, 尤其是在生产级代码中, 并可以在任何情况下通过打开它并随后使用debugr_switchOff()函数将其关闭来对其进行调试。
让我们在示例代码中查看dwatch函数的结构。
library(debugr)debugr_switchOn()myfunction <
- function(x) {z <
- 1for(i in 1:x) {dwatch(crit = "z >
40000", objs = c("z", "i"))z <
- z * i}# avoiding to print the zinvisible(z)}myfunction(10)
#### ----------------------------- DEBUGR MESSAGE ------------------------------#### ** z:## [1] 40320###### ** i:## [1] 9#### ---------------------------------------------------------------------------#### ----------------------------- DEBUGR MESSAGE ------------------------------#### ** z:## [1] 362880###### ** i:## [1] 10#### ---------------------------------------------------------------------------
debugr_switchOff()
在这里, 代码将进行迭代乘法, 或者你可以将函数中使用的任何大小写应用于dwatch函数, 并将其应用于条件z> 4000的变量z。因此, 在满足条件并满足所需条件时, 将输出消息打印的结果是z和i变量的值。
你可以使用一些复杂的参数来操纵输出的格式。
debugr_switchOn()myfunction <
- function(x) {z <
- 1for(i in 1:x) {dwatch(crit = "z >
40000", expr=c("format(z, big.mark = \", \")", "format(i, big.mark = \", \")"))z <
- z * i}# avoiding to print the zinvisible(z)}myfunction(10)
#### ----------------------------- DEBUGR MESSAGE ------------------------------#### ** Expression: format(z, big.mark = ", ")## [1] "40, 320"#### ** Expression: format(i, big.mark = ", ")## [1] "9"## ---------------------------------------------------------------------------#### ----------------------------- DEBUGR MESSAGE ------------------------------#### ** Expression: format(z, big.mark = ", ")## [1] "362, 880"#### ** Expression: format(i, big.mark = ", ")## [1] "10"## ---------------------------------------------------------------------------
debugr_switchOff()
你可以合并几个参数:
- show.all:通过将此参数设置为TRUE, 可以查看条件的所有对象。
- msg:用于添加静态文本消息。
- show.frame:通过将此参数设置为FALSE, 可以删除上下边框。
- 暂停:通过将此参数设置为TRUE, 可以在满足条件后立即停止事务。
推荐阅读
- 在Pandas中加入DataFrames
- 自动化机器学习(Python的TPOT库)
- 用Python揭开关键统计的神秘面纱
- R中的for循环用法
- 在R中创建列表
- web.xml servletservlet-mapping配置
- Android开发-在Android应用里实现自动发送邮件的功能
- 解决krpano全景视频在QQ浏览器安卓不能正常播放的问题
- 关于 appiumget_attribute 方法的坑