Its not clear to me at this point what and where the proposed or already made change is but here is a test that should produce a year/month style rather than numeric style X axis:
library(zoo) z <- zoo(1:12, as.yearmon(2000 + 1:12/12)) plot(z) On Tue, Apr 22, 2008 at 1:18 PM, Duncan Murdoch <[EMAIL PROTECTED]> wrote: > There seem to be nonlinearities in the time-space continuum, so this > message arrived several hours after Martin's, even though both have the > same timestamp. Please test his, and see if you can break it. I'd > guess not, it looks simple enough, but not too simple. > > And for the future: > > Please test the alpha/beta/RC releases! The change we're talking about > came fairly late in the process, but it was there for the last couple of > weeks. It would be easier for everyone if it had been corrected before > release, rather than after. It was announced on the RSS list, here: > > http://developer.r-project.org/blosxom.cgi/R-2-7-branch/NEWS/2008/04/08#n2008-04-08 > > so it would really have helped if people who rely on special axis > handling by Axis had tested the change after they'd seen that notice. > > On 4/22/2008 10:26 AM, Sklyar, Oleg (MI London) wrote: > > Ok, so what's wrong with the following fix for plot(x) > > The main thing that's wrong with it is that you don't explain what the > changes are. I can't believe that the error is specific to the POSIXct > class, so it doesn't make sense that changes there would fix it in general. > > Duncan Murdoch > > > > that would > > actually fix what needs to be fixed instead of changing plot.default? > > Fix means reverting plot.default in 2.7.0 to what it was (if testing in > > 2.7.0, copy and paste the OLD plot.default into the .GlobalEnv): > > > > plot.POSIXct <- function(x, y, xlab = "", ...) { > > if (!missing(y)) { > > side = 1 > > plotDef <- function(x, y, xaxt, xlab, ...) plot.default(x, y, > > xaxt="n", xlab=xlab, ...) > > plotDef(x, y, xlab=xlab, ...) > > } else { > > side = 2 > > plotDef <- function(x, y, yaxt, xlab, ...) plot.default(x, y, > > yaxt="n", xlab=xlab, ...) > > plotDef(seq_along(x), x, xlab=xlab, ...) > > } > > ## trick to remove arguments intended for title() or plot.default() > > axisInt <- function(x, type, main, sub, xlab, ylab, col, lty, lwd, > > xlim, ylim, bg, pch, log, asp, axes, frame.plot, > > ...) > > axis.POSIXct(side, x, ...) > > dots <- list(...) > > axes <- if("axes" %in% names(dots)) dots$axes else TRUE > > xaxt <- if("xaxt" %in% names(dots)) dots$xaxt else par("xaxt") > > if(axes && xaxt != "n") axisInt(x, ...) > > } > > > > plot.POSIXlt <- function(x, y, xlab = "", ...) { > > if (missing(y)) plot.POSIXct(as.POSIXct(x), xlab=xlab, ...) > > else plot.POSIXct(as.POSIXct(x), y=y, xlab=xlab, ...) > > } > > > > And try with: > > x = Sys.time() + runif(100,1,7200) > > plot(x) > > plot(x,1:100) > > plot(1:100,x) > > > > plot(as.POSIXlt(x)) > > plot(as.POSIXlt(x),1:100) > > plot(1:100,as.POSIXlt(x)) > > > > > > Dr Oleg Sklyar > > Technology Group > > Man Investments Ltd > > +44 (0)20 7144 3803 > > [EMAIL PROTECTED] > > > >> -----Original Message----- > >> From: Duncan Murdoch [mailto:[EMAIL PROTECTED] > >> Sent: 22 April 2008 14:24 > >> To: Sklyar, Oleg (MI London) > >> Cc: R-devel@r-project.org > >> Subject: Re: [Rd] graphics::Axis loosing S3/S4 class > >> attributes of 'x' in 2.7.0 RC > >> > >> On 4/22/2008 9:08 AM, Sklyar, Oleg (MI London) wrote: > >> > Duncan, > >> > > >> > looking further, what has changed from 2.6.2 into 2.7.0 are the > >> > following two lines in plot.default, which I think were > >> logical before > >> > and are not really logical now: > >> > >> I believe it is behaving as documented now, so the behaviour > >> is "logical", even if it may not be convenient. In your example > >> > >> x = Sys.time() + runif(100,1,7200) ## time over two hours, > >> POSIXct plot(x, 1:100) plot(1:100, x) > >> > >> the 1st works in 2.6.2 and 2.7.0 and the second only works in 2.6.2. > >> But the change below was designed to fix the case > >> > >> plot(x) > >> > >> which works in 2.7.0 and *not* in 2.6.2, so reverting the > >> change is not the way to address this. > >> > >> Duncan Murdoch > >> > >> > > >> > plot.R: plot.default (2.6.2): > >> > if (axes) { > >> > localAxis(x, side=1, ...) > >> > localAxis(y, side=2, ...) > >> > } > >> > > >> > plot.R: plot.default (2.7.0): > >> > ... > >> > if (axes) { > >> > localAxis(xy$x, side=1, ...) > >> > localAxis(xy$y, side=2, ...) > >> > } > >> > > >> > The fact that xy.coords is called does not really matter. > >> > > >> > > >> > Dr Oleg Sklyar > >> > Technology Group > >> > Man Investments Ltd > >> > +44 (0)20 7144 3803 > >> > [EMAIL PROTECTED] > >> > > >> >> -----Original Message----- > >> >> From: Duncan Murdoch [mailto:[EMAIL PROTECTED] > >> >> Sent: 22 April 2008 13:01 > >> >> To: Sklyar, Oleg (MI London) > >> >> Cc: R-devel@r-project.org > >> >> Subject: Re: [Rd] graphics::Axis loosing S3/S4 class attributes of > >> >> 'x' in 2.7.0 RC > >> >> > >> >> On 22/04/2008 7:25 AM, Sklyar, Oleg (MI London) wrote: > >> >> > Following my previous post on S3 method despatch, I put > >> >> debug messages > >> >> > in the code of Axis, Axis.default and plot.default in > >> >> > graphics/R/axis.R and graphics/R/plot.R to print the > >> class of x, at > >> >> > and y on plot. After recompiling R, what I see is that x > >> *lost* its > >> >> > class attribute (at least for classes not known to > >> 'graphics') in > >> >> > Axis, called directly from plot.default and this could be > >> >> the reason > >> >> > why R did not despatch on Axis.MyClass from my previous > >> post. This > >> >> > happens for both S3 and S4 classes as in the code below! > >> >> Funny enough, > >> >> > even "integer" was reset to numeric in Axis... > >> >> > >> >> If you look at plot.default, you'll see it passes x and y through > >> >> xy.coords to get coordinates. That function ends with > >> >> > >> >> return(list(x=as.double(x), y=as.double(y), xlab=xlab, ylab=ylab)) > >> >> > >> >> so that's where classes get removed. If you don't want this to > >> >> happen, shouldn't you be defining plot.MyClass, or calling the > >> >> default with axes=F, and then calling Axis on your object yourself? > >> >> > >> >> > Is this really an intended behaviour? It looks very wrong to me! > >> >> > >> >> This is documented: ?plot.default tells you to look at ?xy.coords > >> >> for details of how x and y are handled, and xy.coords says "In any > >> >> other case, the 'x' argument is coerced to a vector and > >> >> returned as *y* component where the resulting 'x' is just the > >> >> index vector '1:n'. In this case, the resulting 'xlab' > >> >> component > >> >> is set to '"Index"'." > >> >> > >> >> Duncan Murdoch > >> >> > >> >> > Thanks, > >> >> > Oleg > >> >> > > >> >> > *** R version 2.7.0 RC (2008-04-20 r45403) > >> >> [/research/osklyar/R-devel] > >> >> > *** > >> >> >> Axis > >> >> > function (x = NULL, at = NULL, ..., side, labels = NULL) { > >> >> > cat("In Axis() class(x)=", class(x), "; class(at)=", > >> class(at), > >> >> > "\n", sep = "") > >> >> > if (!is.null(x)) > >> >> > UseMethod("Axis", x) > >> >> > else if (!is.null(at)) > >> >> > UseMethod("Axis", at) > >> >> > else axis(side = side, at = at, labels = labels, ...) } > >> >> > <environment: namespace:graphics> > >> >> >> graphics:::Axis.default > >> >> > function (x = NULL, at = NULL, ..., side, labels = NULL) { > >> >> > cat("In Axis.default() class(x)=", class(x), "; class(at)=", > >> >> > class(at), "\n", sep = "") > >> >> > if (is.null(at) && !is.null(x)) > >> >> > at = pretty(x) > >> >> > axis(side = side, at = at, labels = labels, ...) } > >> >> > <environment: namespace:graphics> > >> >> >> setClass("MyClass", representation(smth="character"), > >> >> > contains="numeric") > >> >> > [1] "MyClass" > >> >> >> a = new("MyClass", runif(10)) > >> >> >> a > >> >> > An object of class "MyClass" > >> >> > [1] 0.773237167 0.548630205 0.987956687 0.212667925 0.337135151 > >> >> > 0.112210501 > >> >> > [7] 0.007140895 0.972028903 0.443581963 0.536452424 Slot "smth": > >> >> > character(0) > >> >> >> plot(1:10,a) > >> >> > In plot.default() class(x)=integer; class(y)=MyClass In Axis() > >> >> > class(x)=numeric; class(at)=NULL In Axis.default() > >> >> class(x)=numeric; > >> >> > class(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In > >> >> > Axis.default() class(x)=numeric; class(at)=NULL > >> >> >> plot(a,1:10) > >> >> > In plot.default() class(x)=MyClass; class(y)=integer In Axis() > >> >> > class(x)=numeric; class(at)=NULL In Axis.default() > >> >> class(x)=numeric; > >> >> > class(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In > >> >> > Axis.default() class(x)=numeric; class(at)=NULL > >> >> >> b = runif(10) > >> >> >> class(b)="AnotherClass" > >> >> >> plot(b,1:10) > >> >> > In plot.default() class(x)=AnotherClass; > >> class(y)=integer In Axis() > >> >> > class(x)=numeric; class(at)=NULL In Axis.default() > >> >> class(x)=numeric; > >> >> > class(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In > >> >> > Axis.default() class(x)=numeric; class(at)=NULL > >> >> >> plot(1:10) > >> >> > In plot.default() class(x)=integer; class(y)=NULL In Axis() > >> >> > class(x)=numeric; class(at)=NULL In Axis.default() > >> >> class(x)=numeric; > >> >> > class(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In > >> >> > Axis.default() class(x)=numeric; class(at)=NULL> > >> >> >> sessionInfo() > >> >> > R version 2.7.0 RC (2008-04-20 r45403) x86_64-unknown-linux-gnu > >> >> > > >> >> > locale: > >> >> > > >> >> > >> LC_CTYPE=en_GB.UTF-8;LC_NUMERIC=C;LC_TIME=en_GB.UTF-8;LC_COLLATE=C;LC > >> >> _ > >> >> > MO > >> >> > > >> >> > >> NETARY=C;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=en_GB.UTF-8;LC_NAME=C;LC_AD > >> >> D > >> >> > RE > >> >> SS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_GB.UTF-8;LC_IDENTIFICATION=C > >> >> > > >> >> > attached base packages: > >> >> > [1] stats graphics grDevices utils datasets > >> methods base > >> >> > > >> >> > > >> >> > Dr Oleg Sklyar > >> >> > Technology Group > >> >> > Man Investments Ltd > >> >> > +44 (0)20 7144 3803 > >> >> > [EMAIL PROTECTED] > >> >> > > >> >> > > >> >> > > >> >> > >> ********************************************************************* > >> >> * > >> >> > The contents of this email are for the named addressee(s) only. > >> >> > It contains information which may be confidential and privileged. > >> >> > If you are not the intended recipient, please notify the sender > >> >> > immediately, destroy this email and any attachments and do not > >> >> > otherwise disclose or use them. Email transmission is > >> not a secure > >> >> > method of communication and Man Investments cannot accept > >> >> > responsibility for the completeness or accuracy of this > >> >> email or any > >> >> > attachments. Whilst Man Investments makes every effort > >> to keep its > >> >> > network free from viruses, it does not accept > >> >> responsibility for any > >> >> > computer virus which might be transferred by way of this > >> >> email or any > >> >> > attachments. This email does not constitute a request, offer, > >> >> > recommendation or solicitation of any kind to buy, > >> >> subscribe, sell or > >> >> > redeem any investment instruments or to perform other such > >> >> > transactions of any kind. Man Investments reserves the right to > >> >> > monitor, record and retain all electronic communications > >> >> through its > >> >> > network to ensure the integrity of its systems, for record > >> >> keeping and > >> >> > regulatory purposes. > >> >> > > >> >> > Visit us at: www.maninvestments.com > >> >> > > >> >> > ______________________________________________ > >> >> > R-devel@r-project.org mailing list > >> >> > https://stat.ethz.ch/mailman/listinfo/r-devel > >> >> > >> >> > >> > >> > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel