[R] "try-error" can not be test. Why?

Duncan Murdoch murdoch.duncan at gmail.com
Thu Sep 9 13:03:11 CEST 2010


On 08/09/2010 11:46 PM, Philippe Grosjean wrote:
> On 08/09/10 19:25, David Winsemius wrote:
>> On Sep 8, 2010, at 1:18 PM, telm8 wrote:
>>
>>> Hi,
>>>
>>> I am having some strange problem with detecting "try-error". From what I
>>> have read so far the following statement:
>>>
>>>
>>> try( log("a") ) == "try-error"
>>>
>>>
>>> should yield TRUE, however, it yields FALSE. I can not figure out why.
>>> Can
>>> someone help?
>>>
>>  > class(try( log("a"), silent=TRUE )) == "try-error"
>> [1] TRUE
> 
> This is perfectly correct in this case, but while we are mentioning a 
> test on the class of an object, the better syntax is:
> 
>  > inherits(try(log("a)), "try-error")
> 
> In a more general context, class may be defined with multiple strings (R 
> way of subclassing S3 objects). For instance, this does not work:
> 
>  > if (class(Sys.time()) == "POSIXct") "ok" else "not ok"
> 
> ... because the class of a `POSIXct' object is defined as: c("POSIXt", 
> "POSIXct"). This works:

Getting even further off track:  another advantage of inherits() is that 
the class can change.  For example, in the upcoming 2.12.0 release, the 
class of Sys.time() will be

 > class(Sys.time())
[1] "POSIXct" "POSIXt"

Putting the names in the reverse order was a relic from ancient times 
that will soon be corrected.

The tests below won't care about this change, but some more fragile 
tests might.

Duncan Murdoch

> 
>  > if (inherits(Sys.time(), "POSIXct")) "ok" else "not ok"
> 
> Alternate valid tests would be (but a little bit less readable):
> 
>  > if (any(class(Sys.time()) == "POSIXct")) "ok" else "not ok"
> 
> or, by installing the "operators" package, a less conventional, but 
> cleaner code:
> 
>  > install.packages("operators")
>  > library(operators)
>  > if (Sys.time() %of% "POSIXct") "ok" else "not ok"
> 
> Best,
> 
> Philippe Grosjean
> 
>>> Many thanks
>>> --
>>> View this message in context:
>>> http://r.789695.n4.nabble.com/try-error-can-not-be-test-Why-tp2531675p2531675.html
>>>
>>> Sent from the R help mailing list archive at Nabble.com.
>>>
>>> ______________________________________________
>>> R-help at 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.
>> David Winsemius, MD
>> West Hartford, CT
>>
>> ______________________________________________
>> R-help at 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.
>>
>>
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list