[R] How to catch an error using try

Steve Lianoglou mailinglist.honeypot at gmail.com
Mon Aug 3 18:05:43 CEST 2009


On Aug 3, 2009, at 11:53 AM, <mauede at alice.it> wrote:

> Sometimes the following function call causes a database exception:
>> gene.seq <- getSequence (id=gene.map[,"ensembl_transcript_id"],  
>> type="ensembl_transcript_id",
> +                              seqType="3utr", mart=hmart)
> I understand the above function must be called by try to capture the  
> eventual error.
> WHat is not clear to me is how to realize that an error has  
> occurred. The on-line documentation
> mentions an invisible object of class "try-error".
> How shall I test whetehr such object has been created or not ?
> I assume it is created whenever an error does occur ....?

By "invisible" object, the documentation is saying that it's returning  
an object via the "invisible" function (see ?invisible). The object is  
no longer invisible if the function is called and the return value is  
assigned to a variable: which you are doing in your case.

In your case, you just have to check to see if the object returned by  
getSequence is a (or inherits from) the "try-error" class. The last  
line of the help in ?try actually shows you how to do that. Here's a  
simpler example:

R> m <- matrix(1:100, 10, 10)
R> a <- try(m[,5]) # no error
R> a
  [1] 41 42 43 44 45 46 47 48 49 50

R> b <- try(m[,11]) # error here
[1] "Error in try(m[, 11]) : subscript out of bounds\n"

To programmatically test if b is an error:

R> is(b, 'try-error')
[1] TRUE

R> > inherits(b, 'try-error') # used in last line of ?try
[1] TRUE


Steve Lianoglou
Graduate Student: Computational Systems Biology
   |  Memorial Sloan-Kettering Cancer Center
   |  Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact

More information about the R-help mailing list