[Rd] Overloading S4 methods

Iago Mosqueira iago.mosqueira at gmail.com
Wed Jun 1 13:39:26 CEST 2011


Dear all,

I am experiencing some problems with S4 method overloading. I have
defined a generic for graphics:plot, using

setGeneric("plot", useAsDefault = plot)

and with

importFrom('graphics', 'plot') and

exportMethods('plot') in the NAMESPACE file of pkg A.

I then proceed to define a method for signature c('myS4class',
'missing'). This works as expected: selectMethod('plot',
c('myS4class', 'missing')) returns the newly defined method, and the
method gets called when invoked.

Another pkg, B, wishes to overload this and redefines the method for
the same signature. A method is defined for c('myS4class', 'missing'),
and exported on the NAMESPACE. The new method is shown by
selectMethod() after pkg B has been loaded, but a call to

plot(anobjectofmyS4class)

comes up with the result of running the first method, from pkg A. I
have tried importing 'plot' in B's NAMESPACE from both graphics or A,
but the end result is the same.

Package B does the same thing for a method created by pkg A, myMethod,
and that works fine.

Any pointers or where this might be going wrong? How is it that a
different method than the one shown by selectMethod() is being run?
Something to do with the 'missing' part of the signature?

Many thanks,



Iago Mosqueira



More information about the R-devel mailing list