如何抑制输出

18

当我从命令提示符运行R脚本时,我希望可以抑制R的输出信息。

我尝试了很多选项,包括 --slave--vanilla。这些选项可以减少输出的文本量。

我还尝试了将输出导向 NUL,但这没有起到作用。


1
也许R会在> NUL无效时打印到stderr。尝试同时附加2>&1 - Joey
2个回答

35

查看 help(sink) 可以做到这一点。在 Unix 上,我会这样做:

sink("/dev/null")    # now suppresses
....                 # do stuff
sink()               # to undo prior suppression, back to normal now

而 Windows 的等效方法(向 Johannes 致敬)是

sink("NUL")
....
sink()

3
通常 Windows 中对应的是 NUL。但是,使用 CreateFile 等方法可能无法打开它,而它的主要功能是由 shell 实现的特殊功能。 - Joey
谢谢 - 我已经根据测试的结果相应地编辑了答案(确保正确地引用NUL)。 - Dirk Eddelbuettel
1
嗨@DirkEddelbuettel,我注意到这个方法不能用于从try()部分中转储错误,sink(file="NUL", type="message")会抱怨"NUL"不是文件连接,在这种情况下,需要使用try(stop("error msg"), silent=TRUE)才能按预期工作。只是想在您的答案中添加这一点,以防其他人遇到此问题。 - Max Gordon
那么,除了提供 tempfile() 之外,是否有一种通用的(跨平台)方法来实现这个? - jan-glx

3
自 R (>= 3.6.0) 版本以来,存在一种与平台无关的替代方案Dirk Eddelbuettel's answer。只需键入即可。
sink(nullfile())    # suppress output
....                # your code
sink()              # end suppressing output

在Linux和Windows上抑制输出。


1
如果将此代码包含在函数中,则可以将其包装在 on.exit(sink()) 中,否则函数中的意外错误可能会让您想知道为什么没有输出到控制台。 - CCID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接