抑制由“print”显示的消息,而不是R中的“message”或“warning”

时间:2012-01-10 01:00:16

标签: r suppress-warnings

我使用的许多R包涉及的功能通过print()调用命令而不是message()或warning()命令提供所有消息和警告。我希望能够使这些功能进度指示器等静音,但标准的supressWarnings()或supressMessages不会这样做。有没有办法可以抑制打印?

例如:

silly_developer_function <- function(x){
   print("Thanks for using my function!!")
   if(is(x, "numeric"))
     print("warning, x should be a character")
   x
}

我想有一个简单的函数suppressPrint(),我可以回滚一下这个函数的调用,它会抑制警告和无用的消息(但仍会打印返回值)。

2 个答案:

答案 0 :(得分:28)

嗯,这些软件包一开始就有错误。在print()实施中使用print除了副作用之外的任何事情都是一个严重的错误。

也就是说,你只需使用capture.output()来收集这些代码的输出而不是打印它。因此,对于上述情况,它将是

capture.output(x <- silly_developer_function(...))
print(x)

答案 1 :(得分:0)

另一种hacky方法是覆盖默认的print函数。它会影响某些功能,例如打印函数体,但是具有自己的打印方法的对象仍然会照常返回。

print <- function(...) {}

> silly_developer_function("a")
[1] "a"
> silly_developer_function(1)
[1] 1