【问题标题】:Is there a way to skip every command line that throws an error in R without `tryCatch`ing every single line?有没有办法跳过每个在 R 中引发错误的命令行,而无需对每一行都进行`tryCatch`?
【发布时间】:2015-11-25 13:40:51
【问题描述】:

我有一个用于 R 中一些数据分析的脚本,它是许多操作的包装器。其中一些依赖于先前的操作,一些则不依赖于先前的操作。如果某些操作失败,有没有办法简单地继续脚本? 我知道tryCatch,但我不想将每个小命令都包装在tryCatch 块中。我宁愿有一些方法可以简单地忽略每个错误并继续执行脚本。

更新以更清楚地解释我的情况:我有一组数据集,一个用于我实验中的每个样本。我的代码目前采用一个数据集,执行一些操作(例如规范化,排除我不感兴趣的部分等),拟合不同的模型(主要是回归和对数回归)并绘图。 我为每个示例循环此代码。我知道,对于一个特定的样本,并非所有操作都会起作用(特别是如果数据集缺少重要数据),但其中一些总是会起作用(例如在任何操作之前的“香草”数据图)。 我想要的是在运行这个脚本时忽略错误,每次一个操作不起作用时跳到下一行,因为即使对于“坏”数据集我仍然想要一些输出(比如上面提到的“香草”图)。 我知道我可以通过将每个操作包装在 tryCatch 函数中来做到这一点,但我希望有一种更简单(也许更草率)的方式来做到这一点。

【问题讨论】:

  • 如果一个部分不依赖于先前的结果,那么为什么要包含它以引入错误?
  • @kristang 也许该行运行模型并引发错误,因为数据不适合此特定模型。用户希望忽略此类情况。 mparada,如果在error 下你读到任何有用的东西,请参阅?options。我个人会采取额外的步骤并为每个“行”实施tryCatch,更改全局设置是......嗯。 :)
  • 我的意思是,这似乎是一个糟糕的设置,我无法想象您最终会如何陷入这种情况。
  • @RomanLuštrik 我检查了options(error),但只能找到两种可能性:recoverdump.frames。在两者中我都进入了交互模式,但我想自动跳到下一步。我尝试创建自己的空函数 (skipError() <- function(){}) 并将其分配给 options ('options(error = skipError)`) 中的 error 参数,但这也不起作用。
  • 那我就没主意了。 :)

标签: r error-handling try-catch


【解决方案1】:

你可以使用try()

try(log("a"),silent = T)

【讨论】:

  • 我阅读了 try 的文档,但我看不出它与 tryCatch 的情况有何不同。我仍然必须将每个命令都包装在 try 函数中......
  • @mparada 使用 try 您不需要捕获错误和警告。如果出现错误,它只是通过该行。
  • @vck 是的,你是对的。我不需要捕捉错误。但这不是我的问题。我仍然必须将每一行包装在try 中。我希望有一种全局跳过错误并继续执行功能的方法。
猜你喜欢
  • 2016-10-19
  • 2019-09-30
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2014-06-03
  • 2023-03-21
  • 2019-09-22
  • 1970-01-01
相关资源
最近更新 更多