2016-02-25 74 views
0

我發現這非常有幫助工廠的任何功能轉換爲捕捉自己的價值觀,錯誤和警告功能(How do I save warnings and errors as output from a function?):拯救功能警告/錯誤不顯示在屏幕上

factory <- function(fun) 
function(...) { 
    warn <- err <- NULL 
    res <- withCallingHandlers(
     tryCatch(fun(...), error=function(e) { 
      err <<- conditionMessage(e) 
      NULL 
     }), warning=function(w) { 
      warn <<- append(warn, conditionMessage(w)) 
      invokeRestart("muffleWarning") 
     }) 
    list(res, warn=warn, err=err) 
} 

我的問題是,屏幕上還顯示錯誤/警告(在工廠捕獲的頂部)。我怎樣才能改變它,使錯誤/警告不顯示在屏幕上? 謝謝

+0

你能澄清你的意思嗎? 'f = factory(stop(「oops」)); res = f()'沒有任何輸出返回到屏幕。 –

+0

你是對的馬丁......我不清楚。我在工廠使用的功能從金融網站下載流數據。它輸出幾條消息通過貓屏幕。其中一些消息最終會成爲錯誤並可能阻止該功能。該函數有一個詳細的參數,可以阻止所有的貓消息。 – kalka

+0

如果我設置verbose = T,工廠會正確捕獲所有警告/錯誤,但也會顯示屏幕上的所有貓。如果我設置了verbose = F,工廠會錯過通過cat發送的重要警告(即使阻塞該函數),並且不會在屏幕上顯示貓。該功能非常複雜,我無法改變它。我寧願稍微修改一下工廠,以便貓的消息被捕獲爲警告(因爲它已經發生),但沒有顯示在屏幕上。 – kalka

回答

0

您需要設置您的選項,以便不顯示錯誤消息。在函數體中可以調用下面的代碼:

options(show.error.messages= FALSE) 

不要忘記在離開前把它變成TRUE,它總是有用看到錯誤消息。