我使用的许多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(),我可以回滚一下这个函数的调用,它会抑制警告和无用的消息(但仍会打印返回值)。
答案 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