-----Original Message-----
From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
Sent: 22 April 2008 14:24
To: Sklyar, Oleg (MI London)
Cc: R-devel at 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
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
osklyar at maninvestments.com
-----Original Message-----
From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
Sent: 22 April 2008 13:01
To: Sklyar, Oleg (MI London)
Cc: R-devel at 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
in the code of Axis, Axis.default and plot.default in
graphics/R/axis.R and graphics/R/plot.R to print the
and y on plot. After recompiling R, what I see is that x
class attribute (at least for classes not known to
Axis, called directly from plot.default and this could be
why R did not despatch on Axis.MyClass from my previous
happens for both S3 and S4 classes as in the code below!
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]
function (x = NULL, at = NULL, ..., side, labels = NULL) {
cat("In Axis() class(x)=", class(x), "; 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>
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)
In plot.default() class(x)=integer; class(y)=MyClass In Axis()
class(x)=numeric; class(at)=NULL In Axis.default()
class(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In
Axis.default() class(x)=numeric; class(at)=NULL
In plot.default() class(x)=MyClass; class(y)=integer In Axis()
class(x)=numeric; class(at)=NULL In Axis.default()
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(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In
Axis.default() class(x)=numeric; class(at)=NULL
In plot.default() class(x)=integer; class(y)=NULL In Axis()
class(x)=numeric; class(at)=NULL In Axis.default()
class(at)=NULL In Axis() class(x)=numeric; class(at)=NULL In
Axis.default() class(x)=numeric; class(at)=NULL>
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
NETARY=C;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=en_GB.UTF-8;LC_NAME=C;LC_AD
SS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_GB.UTF-8;LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets
Dr Oleg Sklyar
Technology Group
Man Investments Ltd
+44 (0)20 7144 3803
osklyar at maninvestments.com
*********************************************************************
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
method of communication and Man Investments cannot accept
responsibility for the completeness or accuracy of this
attachments. Whilst Man Investments makes every effort
network free from viruses, it does not accept
computer virus which might be transferred by way of this
attachments. This email does not constitute a request, offer,
recommendation or solicitation of any kind to buy,
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
network to ensure the integrity of its systems, for record
regulatory purposes.
Visit us at: www.maninvestments.com