From ggrothendieck at gmail.com  Wed Oct 22 20:19:57 2008
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Wed, 22 Oct 2008 14:19:57 -0400
Subject: [Rd] R 2.8.0 qqnorm produces error with object of class zoo?
In-Reply-To: <48FF6256.8080702@biostat.ku.dk>
References: <B89F0CE41D45644A97CCC93DF548C1C314C4EC88@GBHENXMB02.corp.amvescap.net>
	<B89F0CE41D45644A97CCC93DF548C1C314C4ECFB@GBHENXMB02.corp.amvescap.net>
	<48FF215E.80807@biostat.ku.dk>
	<971536df0810220933l6be9989aie61bd69c7978bd17@mail.gmail.com>
	<48FF6256.8080702@biostat.ku.dk>
Message-ID: <971536df0810221119k1709874fl309a83ad41e246c4@mail.gmail.com>

Yes, I noticed that but rank is not generic.  An xtfrm.zoo
method has been added to zoo on R-Forge but rank still
fails:

> R.version.string
[1] "R version 2.8.0 Patched (2008-10-21 r46766)"
> packageDescription("zoo")$Version
[1] "1.5-3"
> library(zoo)
> # next line adds xtfrm zoo method
> xtfrm.zoo <- coredata
> z <- zoo(1:4)
> order(z) # ok
[1] 1 2 3 4
> qqnorm(z) # ok
> rank(z) # error
Error in if (xi == xj) 0L else if (xi > xj) 1L else -1L :
  argument is of length zero


>>>>
>>> (If the MIME type is wrong, then that will happen.)
>>>
>>> Anyways, the root cause seems to be the new function .gt() which is
>>> related to
>>>
>>>    o   New generic function xtfrm() as an auxiliary helper for
>>>        sort(), order() and rank().  This should return a numeric
>>>        vector that sorts in the same way as its input.  The default
>>>        method supports any class with ==, > and is.na() methods but
>>>        specific methods can be much faster.
>>>
>>>        As a side-effect, rank() will now work better on classed
>>>        objects, although possibly rather slowly.
>>>
>>> Here, "better" may be in the eyes of the beholder, for
>>>
>>>
>>>> dax[3]==dax[6]
>>>>
>>> Data:
>>> logical(0)
>>>
>>> Index:
>>> integer(0)
>>>
>>> and accordingly
>>>
>>>
>>>> rank(dax)
>>>>
>>> Error in if (xi == xj) 0L else if (xi > xj) 1L else -1L :
>>>  argument is of length zero
>>>
>>> which is the error that you are seeing.
>>>
>>> What to do about it is a bit dubious. Obviously, we don't want to "fix"
>>> .gt() so that it automatically unclasses objects, and I assume that zoo
>>> has its reasons for not wanting to compare series with different
>>> indices. So I suppose that either the user must unclass, or zoo define
>>> rank.zoo.
>>>
>>
>> Actually qqnorm does not use rank but it does use order and with the
>> xtfrm.zoo method I mentioned qqnorm works with zoo; however, I think
>> rank needs to be fixed in R to make use of xtfrm as well since I would have
>> expected that supplying an xtfrm method for zoo would be sufficient to
>> get both order and rank to work without giving errors.  Also note that rank
>> is not generic.
>>
> Notice that xtfrm.default() uses rank()....
>
> --
>   O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
>  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
>  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
> ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907
>
>
>



[Rd] R 2.8.0 qqnorm produces error with object of class zoo?
Gabor Grothendieck