这真的开始困扰我...我尝试了几种方法,但似乎都没有用

我正在从一个函数运行安装,该函数会生成许多我想抑制的不必要消息,但是我尝试执行的所有方法均无效。

我要抑制的代码是install_github('ROAUth', 'duncantl'),它需要预先加载devtools包。

无论如何,我尝试了invisiblecapture.outputsink,它们都不起作用...或者也许我没有正确使用它们...两种方式...任何想法?

最佳答案

suppressMessages将关闭一些消息(通过调用message打印的消息),但不是全部。

其余消息来自通过R CMD INSTALL函数对system2的脱 shell 调用。我认为这是因为这使您尝试过的所有常规操作(sinkcapture.output等)都无法正常工作。请注意,system2函数带有stderrstdout参数,如果将其设置为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")

10-06 03:33