【问题标题】:R How to turn off specific errorR如何关闭特定错误
【发布时间】:2016-09-21 19:55:27
【问题描述】:

如何全局关闭 R 中的特定错误?

例如,我想“全局”忽略 Rstudio 中的常见错误: “plot.new() 中的错误:图形边距太大”,无需更改每个绘图调用,也无需在 Rstudio 中使绘图面板变大。

例如,我认为在 Matlab 中这样做是可能的。如何在 R 中这样做?谢谢!

【问题讨论】:

  • (1) 我认为这是不可能的; (2) 我不确定你想在这里发生什么。尽管图形边距太大,您是否希望 R 绘制绘图? R 中的错​​误(与警告相反)通常意味着 R 遇到了无法(或不会)解决的问题。有时有一些选项或参数可以覆盖错误,但通常不会。
  • 我希望 R 继续尽管有错误可以这么说。例如,不绘制绘图并继续 R 脚本。
  • 哦,好吧,这更有意义。
  • 另见?try?tryCatch 允许处理错误和条件。例如,您可以用try 将给出错误的行括起来,即使发生错误,脚本也会继续执行。
  • @nicola: 好的,但是你必须改变每一个,例如,情节,调用 R 脚本,用 try 或 tryCatch 将它括起来,这样做会忽略所有错误,而不仅仅是一个特定的错误一。

标签: r error-handling


【解决方案1】:

检查这个。这是错误。

stop("Urgh, the iphone is in the blender !")

这就是使用 try catch 的解决方案。

tryCatch({
   stop("Urgh, the iphone is in the blender !")
}, error=function(e){})

【讨论】:

  • 好的,谢谢。是否可以只关闭一个特定的错误?
  • @anindya 这是一个本地且非特定的解决方案,对吧?所以这可能是唯一的可能性(?),但不是我想要的。
【解决方案2】:

上述解决方案已经提到suppresX-solutions 和tryCatchdplyr 有一个很好的 tryCatch 包装器,称为 failwith

library(dplyr)
toyfun <- function(x){
  stopifnot(x=="coffee")
  return(":)")
}
toyfun(42) # gives error message
toyfun <- failwith(":(", toyfun, quiet=T)
toyfun(42)
[1] ":("

在您的具体示例中,您可以覆盖有问题的函数。请注意,这很危险,只有当它真的困扰您时才应使用它。

plot <- failwith(warning("sth wrong"), plot, quiet=T)

或者:

plot <- function(...) tryCatch(plot(...), error=function(e){})

这样,您在工作区中有一个名为plot 的操纵函数,它被调用而不是base::plot。我认为这是您将获得的“全球”解决方案。然而,更安全的方法是对该函数进行不同的命名,并相应地更改代码中的函数调用。

【讨论】:

  • 谢谢。是否可以只关闭一个特定的错误?如果您使用plot &lt;- failwith(warning("sth wrong"), plot, quiet=T),它将对每个错误都使用failwith case,对吗? (也许这是唯一可能的解决方案?!)
  • 我不知道这一点,除非您使用其他人概述的tryCatch 解决方案,您自己定义一个处理错误的自定义函数。我认为关闭特定错误的最简单和最好的方法是更改​​代码,以便真正避免错误。
【解决方案3】:

我认为您正在寻找suppressWarnings(plot(...)) 或者如果是消息suppressMessages(plot(...))

【讨论】:

  • 是的,它对错误不起作用。所以可能是唯一的方法是使用 Nicola 和 Roland 建议的 try 或 tryCatch 。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多