Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rpy2: how to suppress R output

Tags:

python

r

rpy2

In a Python shell, and using rpy2 when I issue the following command

In [93]: x = robjects.r.bfast(data, h=0.1, season="none", max_iter=1)
[1]
 "No seasonal model will be fitted!"

I get this non-desirable output

[1]
 "No seasonal model will be fitted!"

Is there any way to suppress this output ? I would like to wrap this call to a function and then to an api call. Thus, redirecting output to stdout is non-desirable.

In other words, how to do in rpy2:

sink("/dev/null")

Is there a better way than

robjects.r('sink("/dev/null")')

?

like image 783
nskalis Avatar asked Sep 12 '25 14:09

nskalis


1 Answers

Apparently, the bfast method conditionally prints that message to console with no wrapper to not print which is not advisable code. Reach out to developers on a pull request.

Per this solution, consider R's capture.output which returns character string of output.

...
from rpy2.robjects.packages import importr

utils = importr('utils')    
bfast = importr('bfast')

# NOTICE R's PERIODS CHANGED TO UNDERSCORE TO FIT PYTHON'S OBJECT MODEL
x = utils.capture_output(bfast(data, h=0.1, season="none", max_iter=1))
like image 71
Parfait Avatar answered Sep 14 '25 06:09

Parfait