[Rd] graphics::Axis loosing S3/S4 class attributes of 'x' in 2.7.0 RC

Sklyar, Oleg (MI London) osklyar at maninvestments.com
Tue Apr 22 13:25:43 CEST 2008


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...

Is this really an intended behaviour? It looks very wrong to me!

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_ADDRE
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
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 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



More information about the R-devel mailing list