R Rstudio使用debugr进行调试

当我们谈论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)

R Rstudio使用debugr进行调试

文章图片
在这里, 你可以浏览到不同的函数以迭代方式检查代码。你浏览的功能将显示其代码。
R Rstudio使用debugr进行调试

文章图片
R Rstudio使用debugr进行调试

文章图片
你可以使用traceback查看由单个函数进行的函数调用的流程。
错误调试
在Rstudio中执行代码时, 如果出现错误, 则Rstudio在其交互式控制台中提供了两种方法来解决该问题。一种是回溯, 向你显示函数调用的流程, 另一种是使用调试重新运行。如果你选择使用调试重新运行, Rstudio将带你进入交互式调试器会话, 该会话还将在发生错误的地方暂停执行。
在编辑器中时, 你可以将其与
R Rstudio使用debugr进行调试

文章图片
或使用键盘:
R Rstudio使用debugr进行调试

文章图片
, n:此按钮将带你进入下一步。
R Rstudio使用debugr进行调试

文章图片
或s:与下一个类似, 但不是下一步, 而是进入下一个功能。
R Rstudio使用debugr进行调试

文章图片
或f:完成当前循环或函数的执行。
R Rstudio使用debugr进行调试

文章图片
, c:退出交互式调试。
R Rstudio使用debugr进行调试

文章图片
, Q:停止调试, 终止函数, 然后返回全局工作区。
在任意代码中设置断点
Rstudio会在错误时进入交互式控制台, 但是你可以使用Rstudio断点或browser()在任意代码位置输入。
可以通过几种方法添加断点:
  1. 你可以单击代码行左侧。
  2. 你可以在代码行上按Shift + F9。
  3. 你可以在需要停止执行的位置添加browser()。
RStudio当前不支持通过传递条件来放置断点的条件断点, 在本教程中讨论的调试程序包中对此做了一些处理。 *
有关这些调试方法的详细信息, 请访问此处。
现在让我们谈谈包调试器。
调试器支持较简单的调试方面, 如果你参与较少的调试工作, 则很容易理解。调试器具有一些简单的功能, 它们是:
  • debugr_isActive:-打开和关闭调试模式。
  • debugr_switchOff:-打开和关闭调试模式。
  • debugr_switchOn:-打开和关闭调试模式。
  • dwatch:-在运行时打印调试输出。
在所有这些功能中, 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, 可以在满足条件后立即停止事务。
如果你想了解有关R中调试的更多信息, 请参加srcmini的” 使用RStudio IDE” (第1部分)课程。

    推荐阅读