send R diagnostic messages to stdout instead stderr

前端 未结 4 1571
醉梦人生
醉梦人生 2020-12-31 23:13

Looking for an options which let me to redirect R diagnostic messages (produces by message()) to stdout, not stderr as it is by defaul

4条回答
  •  天涯浪人
    2021-01-01 00:00

    The OP showed the execution happening via the Rscript command and using some I/O redirection. If you want to use redirection to log everything and only show to console on error, the best method I've found is to use || to check if the script had non-zero exit status before printing to screen:

    Rscript myrscript.R > temp.log 2>&1 || cat temp.log

    This method relies strictly on the exit code for printing, which only partly gets around message() going to stderr, but I thought this example helpful to mention since messages won't necessarily trigger a non-zero exit status and you can continue to log quietly with this method.

    If you'd like to go one step further and keep appending to a single log file, then this will work:

    Rscript myrscript.R > temp.log 2>&1 || cat temp.log && cat temp.log >> persistent.log && rm temp.log

    The pseudocode for this command is:

    1. Redirect stderr and stdout into temp.log
    2. If command had non-zero exit status then write to screen
    3. Then redirect the contents of temp.log into your persistent.log
    4. Then remove temp.log

提交回复
热议问题