From ggrothendieck at gmail.com  Wed Oct 22 21:09:25 2008
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Wed, 22 Oct 2008 15:09:25 -0400
Subject: [Rd] R 2.8.0 qqnorm produces error with object of class zoo?
In-Reply-To: <971536df0810221119k1709874fl309a83ad41e246c4@mail.gmail.com>
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>
	<971536df0810221119k1709874fl309a83ad41e246c4@mail.gmail.com>
Message-ID: <971536df0810221209x67e67bf2l1ed16e2a612db863@mail.gmail.com>

And one other point.

z <- zoo(1:4)
.gt(z, 1, 2)

fails because z[1] and z[2] are at different time points so

   z[1] == z[2]

is logical(0) because when zoo compares objects it aligns them
first.

On Wed, Oct 22, 2008 at 2:19 PM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
> 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