From osklyar at maninvestments.com  Tue Apr 22 11:45:28 2008
From: osklyar at maninvestments.com (Sklyar, Oleg (MI London))
Date: Tue, 22 Apr 2008 10:45:28 +0100
Subject: [Rd] S3 method despatch (changed between 2.6.2 and 2.7.0 RC?)
Message-ID: <1A68FCB28DE72F4BA3B967E6506CCE430229487E@mildnpexmb01.maninvestments.ad.man.com>

Dear developers:

I have observed a change in the behaviour of S3 method despatch (as I
guess related to namespaces) between 2.6.2 and yesterday's 2.7.0 RC and
would be grateful if you could comment on that:

the 'Axis' function in the 'graphics' namespace calls
UseMethod("Axis",x), internally to despatch on the S3 Axis method
depending on the type of the argument. Both 2.6.2 and 2.7.0 define the
following Axis.* methods in 'graphics': Axis.Date, Axis.POSIXct
Axis.POSIXlt and Axis.default. Now, if one defines an Axis.MyClass
outside of the 'graphics' namespace, it is called automatically by 2.6.2
on objects of MyClass, i.e. R would search for further method definition
outside of the graphics namespace. Looks like this behaviour has changed
in 2.7.0 so that UseMethod called in a given namesspace (graphics) does
not despatch on methods defined in another namespace (global or another
package) as the example below shows.

Have I done something wrong?

Is it an intended behaviour, any idea how to go around it?

Thanks,
Oleg

PS: The difference in the code below is that 2.6.2 calls Axis.MyClass in
plot.default (and thus prints the message), while 2.7.0 does not.

x = 1:5
class(x) = c("MyClass",class(x))
Axis.MyClass = function (x, at, ..., side, labels=TRUE) {
    print("running Axis.MyClass")
    axis(side, at=if(!missing(x)) x else at, labels=labels, ...)
}
methods("Axis")
plot(x, 1:5)

== >>> Output from 2.6.2 RC (2008-02-08)
=======================================
> methods("Axis")
[1] Axis.Date*    Axis.MyClass  Axis.POSIXct* Axis.POSIXlt*
Axis.default*

   Non-visible functions are asterisked
> plot(x, 1:5)
[1] "running Axis.MyClass"
>
> sessionInfo()
R version 2.6.2 (2008-02-08)
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=en_GB.UTF-8;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=en_GB.UTF-8;LC_NAME=
C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_GB.UTF-8;LC_IDENTIFICATI
ON=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] rcompgen_0.1-17 tools_2.6.2

== >>> Output from 2.7.0 RC (2008-04-20 r45403)
================================
> methods("Axis")
[1] Axis.Date*    Axis.MyClass  Axis.POSIXct* Axis.POSIXlt*
Axis.default*

   Non-visible functions are asterisked
> plot(x, 1:5)
>
> 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

loaded via a namespace (and not attached):
[1] tools_2.7.0


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



[Rd] S3 method despatch (changed between 2.6.2 and 2.7.0 RC?)
Sklyar, Oleg (MI London