2016-02-25 66 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,它总是有用看到错误消息。