在某些编码语言中,光标在调试模式下停止,然后在正在运行的函数的本地环境中发生错误。我想知道R中是否有类似的功能。

目前,我通过研究此问题发现了什么:

  • 要在R中重现该代码,我们需要将“browser()”放置在我们想到的战略位置。然后通过选择函数的所有行来重新编译我们正在运行的函数,然后按CTRL + Enter进行编译,然后运行代码,然后在函数中进行调试。如果浏览器由于错误的猜测而放置不正确,则必须重复执行此操作,从而导致大量的时间损失。
    这是非常痛苦的。
  • 我发现另一个更糟糕的解决方案是使用选项(错误=恢复)。例如,如果我们要进行迭代,则可以在循环开始之前停止它,而不是在引起该错误的迭代中跳转代码。此功能似乎没有多大帮助。
  • 最佳答案

    (这个时间太长/格式化后无法发表评论。)我不确定您的意思(通过引用options(error=recover)
    它会在循环开始前停止运行,而不是在导致该错误的迭代中跳转代码。

    这是一个示例,其中中断似乎发生在导致错误的迭代中,按要求进行:

    options(error=recover)
    f <- function(x) { for (i in 1:x) if (i==2) stop() }
    f(5)
    Error in f(5) :
    Enter a frame number, or 0 to exit
    1: f(5)
    Selection: 1
    Called from: top level
    Browse[1]> print(i)
    [1] 2
    

    这是在循环的特定步骤中断的,而不是(如上面建议的)在循环开始之前中断(其中i将是 undefined 的)。

    您能否举一个可复制的示例来阐明所发生的行为与您希望的行为之间的区别?

    就其价值而言,RStudio前端提供了您可能更喜欢的视觉调试体验。

    07-24 09:51
    查看更多