Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Rscript, is there a decent way to suppress the non-script output? [duplicate]

Tags:

r

rscript

Possible Duplicate:
R suppress startupMessages from dependency

I've read about using sink("NUL") / sink("/dev/null"), but neither of them has fixed the problem I'm having. Even if I wrap the library() commands in sink("NUL") and sink(), my call to Rscript outputs all manner of information I don't want to see:

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

The stuff at the end is the only output I actually want, and also the only output I seem able to suppress with sink() commands. It really seems like there should just be an argument to Rscript that suppresses this output (which doesn't even show up if I source my script in the console)... any input?

like image 589
Claire Sannier Avatar asked Aug 07 '12 22:08

Claire Sannier


People also ask

What is ar script?

An R script is simply a text file containing (almost) the same commands that you would enter on the command line of R. ( almost) refers to the fact that if you are using sink() to send the output to a file, you will have to enclose some commands in print() to get the same output as on the command line.

How do I run a Rscript in R studio?

An R script is just a plain text file that you save R code in. You can open an R script in RStudio by going to File > New File > R script in the menu bar. RStudio will then open a fresh script above your console pane, as shown in Figure 1-7.


1 Answers

Andrew, I ran into the same thing and suppressMessages() didn't remove all the extra output, but using sink() in the form of capture.output() wrapped around the suppressMessages() works.

$ 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) ) )'

What is going on when loading the Rmpfr package is several well behaved startup messages written using the message connection along with a not so nice message using the output connection. Sure, you could create and manipulate a sink() on your own, but that is what capture.output() is already setup to do.

Perhaps setting a verbose arg to get a little more control would be helpful::

$ 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")

Which yields::

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


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

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

Lots of stuff you could play around with there, but at least you can see how to totally suppress the msg output.

Hope it helps. Have fun!

like image 138
Thell Avatar answered Oct 12 '22 22:10

Thell