【问题标题】:R execude expression on warning/errorR在警告/错误上执行表达式
【发布时间】:2015-02-11 11:30:25
【问题描述】:

我处理大量数据集,因此我的 R 程序运行了几个小时。有时会发生一些问题,并且程序会中止并显示一些警告/错误消息。大多数情况下,这不是我自己编写的警告消息,因为我想到了可能出现的问题 - 这是意外导致我调用的某些基本 R 函数中的警告或错误。对于我自己编写的警告消息,我可以使用warningexpr 参数。有没有类似于全局选项的东西?

R(我在 Win 8 上使用 Rstudio)仅在后台运行,因为我还有其他工作要做。我不时点击 R 以查看它是否仍在运行。 如果出现问题,我想从beepr 包中发出类似beep(sound=1) 的哔声。

当出现警告/错误时,有什么方法可以执行某些表达式(例如 beep(sound=1))?后者就足够了,因为可以通过options(warn=2) 将每个警告升级为错误,并且如果 R 仍然执行引发警告的其他表达式,则可能很难执行某些表达式。

【问题讨论】:

    标签: r warnings


    【解决方案1】:

    您可以使用tryCatch 通过以下方式执行此操作:

    产生警告的示例:

    x <- 1:10
    y <- if (x < 5 ) 0 else 1
    
    Warning message:
    In if (x < 5) 0 else 1 :
      the condition has length > 1 and only the first element will be used
    

    使用 tryCatch

    >tryCatch(if (x < 5 ) 0 else 1, 
              warning = function(x) print(x),
              finally = print('hello'))
    
    <simpleWarning in if (x < 5) 0 else 1: the condition has length > 1 and only the first element will be used>
    [1] "hello"
    

    在上面我有print(hello) 的代码中添加beep(sound=1),它会在发出警告时发出哔哔声。

    【讨论】:

    • 谢谢,它有效。我只使用tryCatch(eval(expr), finally=beep(sound=1))。有没有办法全局调用 tryCatch ?还是每次我想使用它时都必须将它包裹在我的代码中?
    • 太棒了!很高兴我能帮忙:)
    • 好吧,您可以将它包裹在您认为可能会产生警告的任何代码中,或者您可以将其包裹在整个脚本中(尽管从未将它用于大型脚本)
    • 我的意思是我在你的答案中使用tryCatch(eval(expr), warning=warning, finally=beep(sound=1)),即warning=function(x) {warning(x)}。我忘记了我之前评论中最重要的部分。
    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多