2015-02-11 109 views
1

我处理大量数据集,因此我的R程序运行几个小时。有时候会发生某些错误,并且程序会中止某些警告/错误消息。大多数时候,这并不是我自己编写的警告消息,因为我想到了什么可能会出错 - 这是意想不到的,导致我调用的某个基本R函数发出警告或错误。对于我自己编程的警告消息,我可以使用warning的参数expr。有没有类似于全球的选择?R执行表达式警告/错误

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

当出现警告/错误时,是否有任何方式执行某个表达式(如beep(sound=1))?它足够后者,因为人们可以通过options(warn=2)来提升每个错误的警告,并且如果R仍执行一些其他表达式来抛出警告,则可能难以执行某个表达式。

回答

3

你可以使用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),当它发出警告时它会发出嘟嘟声。

+0

谢谢,它的工作原理。我只是使用'tryCatch(eval(expr),finally = beep(sound = 1))'。 有没有办法调用全局tryCatch?或者每次我想要使用它时都必须将其包装在我的代码中? – 2015-02-11 12:15:22

+0

太棒了!很高兴我可以帮助:) – LyzandeR 2015-02-11 12:16:45

+0

那么,你可以将它包装在任何你认为可能会产生警告的代码中,或者你可以将它包装在整个脚本中(尽管从未用过它作为一个巨大的脚本) – LyzandeR 2015-02-11 12:17:55