11

可能重复:
R 从依赖项中抑制启动消息

我已经阅读了有关使用sink("NUL")/sink("/dev/null")的信息,但它们都没有解决我遇到的问题。即使我将library()命令包装在sink("NUL")and中sink(),我对 Rscript 的调用也会输出我不想看到的各种信息:

Loading required package: Matrix
Loading required package: methods
Loading required package: lattice
Loaded glmnet 1.8

Loading required package: MASS
Loading required package: lme4

Attaching package: 'lme4'

The following object(s) are masked from 'package:stats':

    AIC, BIC

Loading required package: R2WinBUGS
Loading required package: coda

Attaching package: 'coda'

The following object(s) are masked from 'package:lme4':

    HPDinterval

Loading required package: abind
Loading required package: foreign

arm (Version 1.5-05, built: 2012-6-6)

Working directory is C:/Users/andrews/bootstraps/user/_branches/ER-PoC/Bootstraps/R


Attaching package: 'arm'

The following object(s) are masked from 'package:coda':

    traceplot

[1] "client=51"         "date='01-01-2011'"
[1] "01-01-2011"
[1] 51

最后的东西是我真正想要的唯一输出,也是我似乎能够用sink()命令抑制的唯一输出。似乎真的应该有一个参数来抑制这个输出(如果我的脚本在控制台中Rscript,它甚至不会出现)......任何输入?source

4

1 回答 1

8

安德鲁,我遇到了同样的事情,suppressMessages()并没有删除所有额外的输出,而是以环绕作品sink()的形式使用。capture.output()suppressMessages()

$ rscript --vanilla -e 'library(Rmpfr)'
Loading required package: methods
Loading required package: gmp
---->8----
Loading C code of R package 'Rmpfr': GMP using 32 bits per limb
---->8----


$ rscript --vanilla -e 'suppressMessages( library(Rmpfr) )'
Loading C code of R package 'Rmpfr': GMP using 32 bits per limb


$ rscript --vanilla -e 'msg.out <- capture.output( suppressMessages( library(Rmpfr) ) )'

加载 Rmpfr 包时发生的情况是使用连接编写的几条表现良好的启动消息以及使用message连接的不太好的消息output。当然,您可以sink()自己创建和操作 a,但这capture.output()是已经设置好的。

也许设置一个详细的 arg 以获得更多控制会有所帮助::

$ cat sample.R
#!/c/opt/R/R-2.15.0/bin/rscript --vanilla

cmd_args <- commandArgs( TRUE );

if( length( cmd_args ) > 0 ) {
  eval( parse( text = cmd_args[1] ) )
}

if( exists( "verbose" ) ) {
  library( Rmpfr )
} else {
  msg.trap <- capture.output( suppressMessages( library( Rmpfr ) ) )
}

print("Hello")

产生::

$ ./sample.R
[1] "Hello"


$ ./sample.R "verbose=TRUE"
Loading required package: methods
Loading required package: gmp

Attaching package: 'gmp'
---->8----
[1] "Hello"

你可以在那里玩很多东西,但至少你可以看到如何完全抑制 msg 输出。

希望能帮助到你。玩得开心!

于 2012-08-08T05:24:16.803 回答