Well, the goal is to include a reference to f2 in the error message 
returned by f2('char'); sys.call(1) appears to do the trick. You 
mentioned this function could be unreliable, could you please provide an 
example?

Sebastien

William Dunlap wrote:
>> -----Original Message-----
>> From: r-help-boun...@r-project.org 
>> [mailto:r-help-boun...@r-project.org] On Behalf Of Henrique 
>> Dallazuanna
>> Sent: Wednesday, January 05, 2011 9:26 AM
>> To: Sebastien Bihorel
>> Cc: R-help
>> Subject: Re: [R] Stop and call objects
>>
>> Try this:
>>
>> f <- function(x) 
>> tryCatch(sum(x),error=function(e)sprintf("Error in %s:
>> %s",  deparse(sys.call(1)), e$message))
>> f('a')
>>     
>
> The argument e to the error handler contains a call
> component so you don't have to rely on the unreliable
> sys.call(1) to get the offending call.  E.g.,
>  
>   > f2 <- function(x) {
>     tryCatch(sum(x),
>       error=function(e) {
>         sprintf("Error in %s: %s", deparse(e$call)[1], e$message)
>       }
>     )
>   }
>   > f2('char')
>   [1] "Error in sum(x): invalid 'type' (character) of argument"
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com 
>
>   
>> On Wed, Jan 5, 2011 at 12:23 PM, Sebastien Bihorel <
>> sebastien.biho...@cognigencorp.com> wrote:
>>
>>     
>>> Dear R-users,
>>>
>>> Let's consider the following snippet:
>>>
>>> f <- function(x)  tryCatch(sum(x),error=function(e) stop(e))
>>> f('a')
>>>
>>> As expected, the last call returns an error message: Error 
>>>       
>> in sum(x) :
>>     
>>> invalid 'type' (character) of argument
>>>
>>> My questions are the following:
>>> 1- can I easily ask the stop function to reference the "f" 
>>>       
>> function in
>>     
>>> addition to "sum(x)" in the error message?
>>> 2- If not, I guess I would have to extract the call and 
>>>       
>> message objects
>>     
>>> from e, coerce the call as a character object, build a 
>>>       
>> custom string, and
>>     
>>> pass it to the stop function using call.=F. How can I 
>>>       
>> coerce a call object
>>     
>>> to a character and maintain the "aspect" of the printed 
>>>       
>> call (i.e. "sum(x)"
>>     
>>> instead of the character vector "sum" "x" returned by 
>>>       
>> as.character(e$call))?
>>     
>>> Thank you
>>>
>>> Sebastien
>>>
>>> ______________________________________________
>>> R-help@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>>       
>>
>> -- 
>> Henrique Dallazuanna
>> Curitiba-Paraná-Brasil
>> 25° 25' 40" S 49° 16' 22" O
>>
>>      [[alternative HTML version deleted]]
>>
>>
>>     

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to