个性化阅读
专注于IT技术分析

R Rstudio使用debugr进行调试

当我们谈论R中的调试时, 在python和其他编程IDE上工作的人会感到有些负面。 R本身有一些有用的功能, 例如traceback()和browser()以及RStudio中的交互式工具, 但是不知何故, 内置功能无法解决一些限制。在这种情况下, 我们会陷入困境, 这需要更多的时间来解决。

然后到达调试程序包, 你可以在编写复杂的方法和循环时使用该程序包, 该程序包向你显示运行时变量条目, 并帮助你在更短的时间内解决该错误。尽管你需要为代码输入和调试器的动作上的点进行预计划。与在执行时以困难的方式解决问题相比, 值得花一些时间。

Rstudio中的调试方面

Rstudio提供了一个用于调试的交互式平台, 使检测复杂功能中的错误变得更加容易。

让我们在下面绘制一个函数并应用这些方法。

f <-函数(a)g(a)g <-函数(b)h(b)h <-函数(c)i(c)i <-函数(d)j(d)j <-函数)” a” + e

f(10)

R Rstudio使用debugr进行调试1

在这里, 你可以浏览到不同的函数以迭代方式检查代码。你浏览的功能将显示其代码。

R Rstudio使用debugr进行调试2
R Rstudio使用debugr进行调试3

你可以使用traceback查看由单个函数进行的函数调用的流程。

错误调试

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

在编辑器中时, 你可以将其与

R Rstudio使用debugr进行调试4

或使用键盘:

R Rstudio使用debugr进行调试5

, n:此按钮将带你进入下一步。

R Rstudio使用debugr进行调试6

或s:与下一个类似, 但不是下一步, 而是进入下一个功能。

R Rstudio使用debugr进行调试7

或f:完成当前循环或函数的执行。

R Rstudio使用debugr进行调试8

, c:退出交互式调试。

R Rstudio使用debugr进行调试9

, 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 <- 1

  for(i in 1:x) {
    dwatch(crit = "z > 40000", objs = c("z", "i"))
    z <- z * i
  }
  # avoiding to print the z
  invisible(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 <- 1

  for(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 z
  invisible(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部分)课程。

赞(0)
未经允许不得转载:srcmini » R Rstudio使用debugr进行调试

评论 抢沙发

评论前必须登录!