The Luke's proposition it works fine.
I have extended the code proposed by Luke, to implemtent a "myTry()" and a
"mytraceback()".
They print the function stack and the variables of each functions, it may helps.
---------- mytry.R
--------------------------------------------------------------------------------------------------------------------------------------------------------
myTry <- function(expr) {
withRestarts(
withCallingHandlers(expr,
error = function(e) {
error = e
calls = sys.calls()
frames = sys.frames()
invokeRestart("myAbort", e, calls, frames)
}),
myAbort = function(e, calls, frames){
err = list(error = e, calls=calls, frames=frames)
class(err)<-c("try-error")
return(err)
}
)
}
myTraceback <- function(trace, optFunctions2Skip=c() ){
functions2Skip = c('withRestarts','withCallingHandlers','invokeRestart',
'withOneRestart' ,'myTry', 'doWithOneRestart', '.handleSimpleError', optFunctions2Skip)
for( i in 1:length(trace$frames)){
env = trace$frames[[ i ]]
func = trace$calls [[ i ]]
funcStr = as.character(trace$calls[[i]])
funcNameStr = funcStr[1]
args=FALSE
simple.Error=FALSE
if(length(funcStr) > 1){
funcArgs = funcStr[2:length(funcStr)]
args = TRUE
if(any(grep('simpleError',funcArgs))){simple.Error=TRUE}
}
if ( !(funcNameStr %in% functions2Skip) && !simple.Error){
cat('\n---------------------------------\n')
if(args) cat(funcNameStr,'(',funcArgs,')','\n')
else cat(funcNameStr,'()','\n')
cat('- - - - - - - - - - - - - - - - -\n')
vars=ls(env)
for(v in vars){
cat(v,'=')
print(get(v, envir=env))
}
}
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
---- Exemple.R
----------------------------------------------------------------------------------------------------------------------------------
f<-function(a,b){
return(regexpr(a,b))
}
g<-function(a,b){f(a,b)}
TEST<-function(){
myTry(1+2)
r = myTry(g("A",2))
return( r )
}
r=TEST()
if(inherits(r,'try-error')){
print(r$error)
myTraceback(r, optFunctions2Skip='TEST')
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
--
Edouard Duchesnay Tel: +33 1 69 86 78 52
CEA - SHFJ Fax: +33 1 69 86 77 86
4, place du G�n�ral Leclerc
91401 Orsay Cedex France
______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html