这真的开始困扰我...我尝试了几种方法,但似乎都没有用
我正在从一个函数运行安装,该函数会生成许多我想抑制的不必要消息,但是我尝试执行的所有方法均无效。
我要抑制的代码是install_github('ROAUth', 'duncantl')
,它需要预先加载devtools
包。
无论如何,我尝试了invisible
,capture.output
和sink
,它们都不起作用...或者也许我没有正确使用它们...两种方式...任何想法?
最佳答案
suppressMessages
将关闭一些消息(通过调用message
打印的消息),但不是全部。
其余消息来自通过R CMD INSTALL
函数对system2
的脱 shell 调用。我认为这是因为这使您尝试过的所有常规操作(sink
,capture.output
等)都无法正常工作。请注意,system2
函数带有stderr
和stdout
参数,如果将其设置为FALSE
,则会关闭所有这些消息。不幸的是,默认情况下system2
使用stdout = ""
和stderr = ""
,似乎没有办法通过devtools
包访问这些参数。
因此,我设法没有任何消息运行的一种方法是在基本环境中临时覆盖system2
函数。它不是特别优雅,但是可以工作:
# store a copy of system2
assign("system2.default", base::system2, baseenv())
# create a quiet version of system2
assign("system2.quiet", function(...)system2.default(..., stdout = FALSE,
stderr = FALSE), baseenv())
# overwrite system2 with the quiet version
assignInNamespace("system2", system2.quiet, "base")
# this is now message-free:
res <- eval(suppressMessages(install_github('ROAUth', 'duncantl')))
# reset system2 to its original version
assignInNamespace("system2", system2.default, "base")