On 16/7/09 12:18 PM, Duncan Murdoch wrote:
Gad Abraham wrote:
Hi,

Say I have two packages, test1 and test2, that both define the generic
method train (identical definition), and each has a specific train
method for a different S4 object (foo and bar, resp.)

I want to be able to call train(foo, x, y) and train(bar, x, y), which
doesn't work since test2 masks test1, as seen below.

The two solutions I can think of are to a) prefix train,
test1::train(foo) and test2::train(bar), which gets cumbersome for
non-trivial code, or b) make test2 depend on test1 so it doesn't have
to define the generic, but I'd rather keep the packages compatible but
not dependent. Any suggestions?

Two other possibilities:

Make just one package, with just one definition, and put all the other
stuff from test1 and test2 into it.

Make a third package to hold the generic, and have both packages depend
on that.

Thanks, but these approaches only really work if you're the author of both packages. I'm more interested in having compatible packages which just work together, just like predict works on any object.

Is there a way to tell R that the two generics are really the same so not to complain about it, or alternatively, to search for the method in each object's own package first?

I ended up assigning the respective train method as an attribute to each object, and then extracting that when needed; it works but it's a bit ugly.

--
Gad Abraham
MEng Student, Dept. CSSE and NICTA
The University of Melbourne
Parkville 3010, Victoria, Australia
email: gabra...@csse.unimelb.edu.au
web: http://www.csse.unimelb.edu.au/~gabraham

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to