r - doWithOneRestart 错误

标签 r debugging try-catch

我有一个更长、更复杂的代码(>7000 行),其中包含许多嵌套函数,每个函数都包含在一个单独的 tryCatch 中。除了“伪错误”之外,代码工作完美:

Error in doWithOneRestart(return(expr), restart): no function to return from, jumping to top level 

doWithOneRestart() 在 R 内部作为 tryCatch 函数的一个元素。我称之为“伪错误”,因为如果发生错误,tryCatch 应该导致 stop() 并将错误消息写入日志文件。相反,这个“错误”并没有停止程序(实际上根本不影响它)并且它只显示在控制台上而不写入日志文件。通常的调试程序没有帮助,因为错误不可重现(!):它可能发生在程序的不同处理阶段。将警告选项更改为 0 或 -1 将无济于事。

因为程序完成了工作,所以这个错误并不严重。但我想了解发生了什么。也许有人已经遇到过同样的问题,或者可以想出一个原始的调试策略......

更新 (28.10.2013): 我发现问题出在哪里。它与 java 堆溢出问题有关(我使用 xlsx 包读取 Excel 文件)。在许多其他问题中:虽然与 Excel 文件的连接已关闭(肯定!),但系统将其视为未使用的连接(如 traceback() 所示),尝试关闭它,但发现它已经关闭:你得到上面描述的“伪错误”,而且永远不会完全在同一时刻(不可重现)。在正确的地方使用垃圾收集器 gc() 解决了这个问题。该脚本现在可以稳定运行几天。

最佳答案

Peter Dalgaard 的建议 on R-help .

The easiest way to get that message is to execute return() from the top level:

return(1) 

You might be trying to return() from source()d file. Or maybe source()ing something that was intended to be inside a function body (extraneous '}' characters can do that).


通常的调试策略应该有效:在错误后调用 traceback(),或设置 options(error = recover)

关于r - doWithOneRestart 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512165/

相关文章:

javascript - 脚本 block 中的javascript错误处理

javascript - 在解析 "await Promise"之前输入 Catch block

r - 如何从私有(private)数据创建示例数据集(用无信息的占位符替换变量名称和级别)?

flutter - Dart 中有没有办法将函数标记为抛出异常?

r - 获取最频繁的条目

c# - 调试由另一个 exe 运行的 exe

iOS5 "Discarding message for event 0 because of too many unprocessed messages"是什么意思?

java - 调试安卓java

r - dplyr:对带引号的变量名进行 mutate 的标准评估

Python 或 R! - 为指定的光栅文件绘制直方图