2015-02-11 134 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