我读过关于使用sink("NUL")
/ sink("/dev/null")
的内容,但他们都没有解决我遇到的问题。即使我将library()
命令包含在sink("NUL")
和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
我的脚本,它甚至不显示... ...任何输入?
答案 0 :(得分:7)
安德鲁,我遇到了同样的事情而且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()
,但这就是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输出。
希望它有所帮助。玩得开心!