Stan output in RStan

rstan

#1

Two questions about output when running stan() or sampling():

  • Are the exception messages stored anywhere in the fit object returned, or are they just written to stderr? If I’m running a series of models or happen to do anything that produces a lot of output after running stan(), the exception messages get scrolled off the top of my console buffer and lost.

  • Is there any way to redirect this output? I’ve tried using sink() and capture.output(), but warning messages and progress messages still are printed on the console.


#2

Check out the startBigStan/watchBigStan/collectBigStan functions in my very much work-in-progress package ezStan. It creates a temp folder and runs the sampling in a separate process per core/chain and pipes the stdout & stderr messages to files you can look at. I’m about to add a bit to collectBigStan that will grab both and store them as an attribute to the returned stanfit object so you can check their contents from R.


#3

We’re working toward truly shutting up Stan. Now that we’ve refactored the basic commands on the C++ side it should be easier going forward.


#4

I’ve used the quietly() function in the purrr package on sampling() to suppress the output. quietly() returns a list with 4 elements: result for the data what would be returned by sampling, and output, warnings, and messages for different kinds of console output.

q_demo <- purrr::quietly(sampling)(my_model, data_list)
str(q_demo, max.level = 1)
#> List of 4
#>  $ result  :Formal class 'stanfit' [package "rstan"] with 10 slots
#>  $ output  : chr "\nSAMPLING FOR MODEL '10aab2914b4d5570b26da460b3b8758b' NOW (CHAIN 1).\n"| __truncated__
#>  $ warnings: chr(0) 
#>  $ messages: chr(0) 

#5

On the other question (“Are exception messages stored anywhere in the fit objected returned?”) I take it then that the answer is no?

Fortunately, it looks like I can use purrr::quietly (thanks, tjmahr!) to capture those, even if other output currently leaks through.