什么是 R 调试?17 Mar 2025 | 6 分钟阅读 在计算机编程中,调试是一个多步骤的过程,包括识别问题、隔离问题的根源,然后修复问题或确定解决问题的方法。调试的最后一步是测试改进或解决方法,并确保其有效。 语法正确的程序可能会由于一些逻辑错误而产生不正确的结果,这些逻辑错误被称为“bug”。在这种情况下,如果出现此类错误,我们需要找出它们发生的原因和地点,以便我们可以修复它们。识别和修复 bug 的过程称为“调试”。 ![]() 调试的基本原则R 程序员发现他们花在调试程序上的时间比实际编写或编码的时间更多。这使得调试技能的价值降低。 在 R 中,有各种调试原则可以帮助程序员将时间花在编写和编码上,而不是调试上。 这些原则如下 ![]() 1. 调试的本质修复 bugging 是一个确认的过程。 它逐渐确认我们认为关于代码的许多方面实际上是正确的。 当发现其中一个假设是错误时,我们就会找到 bug 位置的线索。 例如 2. 从小处着手至少在 R 调试过程的开始阶段,坚持使用小型、简单的测试用例。 使用大数据对象会使我们难以思考问题。 当然,我们最终应该在大型、复杂的情况下测试我们的代码,但要从小处着手。 3. 以模块化方式调试大多数专业软件开发人员都认为代码应该以模块化的方式编写。 我们的第一级代码对于函数调用来说不应该太长。 并且这些函数不应该太长,如果需要,应该调用另一个函数。 这使得代码更容易编写,并有助于其他人在需要扩展代码时理解代码。我们应该以自上而下的方式进行调试。 假设我们有函数 f () 的调试状态,它有以下行。 例如 目前,对 debug (g) 说不。 执行该行并查看 g () 是否返回我们期望的值。 如果发生这种情况,我们只需避免通过 g() 进行单步耗时的过程。 如果 g () 返回不正确的值,那么现在是调用 debug (g) 的时候了。 4. 反调试如果代码的某个部分中变量 z 应该是正数,那么我们可以插入以下行以获得更好的性能 Stopifnot(z>0) 当代码中存在 bug,例如 z 的值等于 -3 时,将调用 Stopifnot() 函数,并将通过错误消息将事情恢复原状 错误:x>0 不为 TRUE 函数在 R 中,出于调试目的,有许多函数可用。 这些函数在从我们的代码中删除 bug 方面起着重要作用。 R 提供了以下调试函数 1) traceback()如果我们的代码已经崩溃,并且我们想知道有问题的行在哪里,请尝试 traceback ()。 这(有时)会显示问题代码中的某个位置。 当 R 函数失败时,会在屏幕上打印错误。 紧接在错误之后,我们可以调用 traceback () 以查看哪个函数发生了错误。 traceback () 函数打印在发生错误之前调用的函数列表。 这些函数以相反的顺序打印。 让我们看一个例子来了解如何使用 traceback() 函数 示例 当我们运行上面的代码时,它将生成以下输出 ![]() 在找到以下错误后,我们调用 traceback() 函数,当我们运行时,它将显示以下输出 traceback() ![]() 2) debug()在 R 中,debug () 函数允许用户单步执行函数的执行。 在任何时候,我们都可以打印变量的值或绘制函数内结果的图形。 在调试时,我们可以只键入“c”来继续到当前代码块的末尾。 Traceback () 不会告诉我们函数错误发生的位置。 要知道哪一行导致错误,我们必须使用 debug () 单步执行该函数。 让我们看一个例子来了解如何在 R 中使用 debug 函数。 示例 输出 ![]() 3) browser()browser() 函数会暂停函数的执行,直到用户允许它继续。 如果我们不想逐行单步执行完整代码,但希望在某个特定点停止它,以便我们可以检查发生了什么,这很有用。 在函数中插入对 browser() 的调用将在调用 browser () 的点暂停函数的执行。 它与使用 debug () 相同,只是我们可以控制执行暂停的位置。 让我们看一个例子来了解如何在 R 中使用 browser() 函数。 示例 输出 ![]() 4) trace()trace() 函数调用允许用户将代码位插入到函数中。 对于初次使用的用户来说,R 调试函数 trace () 的语法有点笨拙。 最好使用 debug ()。 让我们看一个例子来了解如何在 R 中使用 browser() 函数。 示例 输出 ![]() 5) recover()当我们对函数进行调试时,recover () 允许我们检查上层函数中的变量。 通过在选择中键入一个数字,我们可以导航到调用堆栈上的函数,并在浏览器环境中部署它。 recover () 函数用作错误处理程序,使用 options () 设置(例如,Adopt (error = retrieval))。 当函数抛出错误时,执行将在失败点停止。 我们可以浏览函数调用并检查环境以找到问题的根源。 示例 输出 ![]() 调试已安装的包已安装的 R 包可能会出现错误。 我们可以通过以下几种方法来解决我们的问题
错误处理和恢复异常或错误处理是对中断代码流的代码的奇怪事件的响应过程。 通常,异常处理程序的范围从 try 开始,到 catch 结束。 R 为此提供了 try () 和 trycatch () 函数。 try () 函数是 trycatch () 的包装器函数,它会打印错误,然后继续。 另一方面,trycatch () 让我们控制错误函数,并且可以选择继续函数的进程。 下一个主题R CSV 文件 |
我们请求您订阅我们的新闻通讯以获取最新更新。