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.
Duncan Murdoch
You can get the code at
http://www.cs.mu.oz.au/~gabraham/test1_0.1.tar.gz
and
http://www.cs.mu.oz.au/~gabraham/test2_0.1.tar.gz
Thanks,
Gad
> library(test1)
> f <- new('foo')
> f
An object of class “foo”
Slot "x":
[,1]
[1,] NA
Slot "y":
logical(0)
> x <- matrix(rnorm(9), 3, 3)
> y <- rnorm(3)
> train(f, x, y)
An object of class “foo”
Slot "x":
[,1] [,2] [,3]
[1,] -1.1274528 1.5079401 1.5252550
[2,] -1.8574282 0.1638099 0.4446156
[3,] -0.7004087 -0.6221687 2.2455707
Slot "y":
[1] -0.2074759 0.2224259 1.1194120
> library(test2)
Attaching package: 'test2'
The following object(s) are masked from package:test1 :
train
> train(f, x, y)
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "train", for
signature "foo", "matrix", "numeric"
> test2::train
standardGeneric for "train" defined from package "test2"
function (object, x, y, ...)
standardGeneric("train")
<environment: 0x160a22d0>
Methods may be defined for arguments: object, x, y
Use showMethods("train") for currently available ones.
> test1::train
standardGeneric for "train" defined from package "test1"
function (object, x, y, ...)
standardGeneric("train")
<environment: 0x16075070>
Methods may be defined for arguments: object, x, y
Use showMethods("train") for currently available ones.
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel