I observed a different between an interactive and non-interaction R session about traceback()
which I do not understand. For the code below, it will produce an error, but in an interactive R session, I can see the traceback information, whereas if I save the code to test.R
and call it via Rscript test.R
or R -f test.R
, I can no longer see the traceback:
f = function() {
on.exit(traceback())
1 + 'a'
}
f()
In an interactive R session:
> f = function() {
+ on.exit(traceback())
+ 1 + 'a'
+ }
> f()
Error in 1 + "a" : non-numeric argument to binary operator
1: f()
Non-interactive execution:
$ Rscript test.R
Error in 1 + "a" : non-numeric argument to binary operator
Calls: f
No traceback available
Execution halted
I did not see an explanation in ?traceback
, and I'm wondering if there is a way to enable traceback for non-interactive R sessions. Thanks!
traceback
looks for an object called.Traceback
in thebaseenv()
. It looks (fromsrc/main/errors.c
) like this is only created if, among other conditions,R_Interactive || haveHandler
. Without.Traceback
, you will get the message "No traceback available". There's also a warning under?traceback
that mentions.Traceback
. – Hodgkinson