Based on the quote that Peter gave: 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. it seems that it was the intention to have rank(x) use x only via xtfrm(x) but that is not, in fact, how it works as defining xtfrm.zoo still results in the discussed error. On Thu, Oct 23, 2008 at 5:13 AM, Pfaff, Bernhard Dr. <[EMAIL PROTECTED]> wrote: > Dear Achim, Gabor, Jeff, Peter and remaining list-subscribers, > > first, please accept my apologies for having started this thread. Given the > avalanche of responses (some off-list) and the associated time stamps, some > of you have almost pulled an all-nighter about this topic. I might have not > have started this thread in the first place, if I would have known this. > > I agree with Achim's view that a "not working for zoo objects" strategy is > preferable compared to a "half-working for zoo objects" strategy. I do not > have either a problem by employing coredata(z) when necessary. Now, Gabor, > you pointed out nicely that the culprit, namely that order() resides on top > of xtfrm whereas rank() does not (this was voiced by you in an email to Peter > and R-Devel, hence I inlucde these recipients again in this thread and the > reason for doing this is also motivated by the following proposition): > > You further pointed out that the problems wrt to rank and zoo-objects could > be solved if rank() would, like order() does, reside on top of xtfrm. My > question/proposal would then be to follow this approach, i.e. use xtfrm in > rank. Now, I am not that deep into R nor an expert to judge whether this > would cause problems/breaking existing R code in other instances; hence I > appreciate feedback if this would be a feasible/desirable change in R-Devel. > > > Best, > Bernhard > >>-----Ursprüngliche Nachricht----- >>Von: Gabor Grothendieck [mailto:[EMAIL PROTECTED] >>Gesendet: Donnerstag, 23. Oktober 2008 02:36 >>An: Peter Dalgaard >>Cc: Pfaff, Bernhard Dr.; [EMAIL PROTECTED] >>Betreff: Re: [Rd] R 2.8.0 qqnorm produces error with object of >>class zoo? >> >>I don't think its hopeless. order works ok provided the >>underlying class >>defines an xtfrm method. I think rank should follow that >>route too. Its >>arguably the inconsistency between rank and order (order but not the >>rank uses xtfrm) that causes the inconsistent behavior between the two. >>If rank were also built on top of xtfrm then it would work as >>desired as >>well. >> >>On Wed, Oct 22, 2008 at 5:03 PM, Peter Dalgaard >><[EMAIL PROTECTED]> wrote: >>> Gabor Grothendieck wrote: >>>> >>>> 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. >>> >>> Yes, that was the point that I was trying to make. Well, >>arguably it doesn't >>> "fail", it just does what it is supposed to do. Things would >>"work" with [[ >>> or a preceding unclass(z), but that would break comparisons >>involving, say, >>> POSIXlt objects. So you're sort of stuck between a rock and >>a hard place. >>> >>>> >>>> On Wed, Oct 22, 2008 at 2:19 PM, Gabor Grothendieck >>>> <[EMAIL PROTECTED]> 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 >>>>>> ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: >>(+45) 35327907 >>>>>> >>>>>> >>>>>> >>> >>> >>> -- >>> 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 >>> ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: >>(+45) 35327907 >>> >> > ***************************************************************** > Confidentiality Note: The information contained in this message, > and any attachments, may contain confidential and/or privileged > material. It is intended solely for the person(s) or entity to > which it is addressed. Any review, retransmission, dissemination, > or taking of any action in reliance upon this information by > persons or entities other than the intended recipient(s) is > prohibited. If you received this in error, please contact the > sender and delete the material from any computer. > ***************************************************************** > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel