On Tue, 2010-01-19 at 12:55 -0800, Seth Falcon wrote:
> I would expect setGeneric to create a new generic function and
> nuke/mask
> methods associated with the generic that it replaces.
I tried a test in R 2.7.1, and that is the behavior. I think it would
be worthwhile to document it in ?setGeneric.
Also, ?setGeneric advocates first defining a regular function (e.g., bar) and then doing a simple setGeneric("bar"). I think the advice for package developers is different, so perhaps some changes there would be a good idea too.
I thought I was defining setGeneric twice for a few functions, and thus that it did work OK. It turns out I have no duplicate definitions.
Here's the test:
> setClass("A", representation(z="ANY"))
[1] "A"
> setClass("B", representation(y="ANY"))
[1] "B"
> setGeneric("foo", function(x) standardGeneric("foo"))
[1] "foo"
> setMethod("foo", signature(x="A"), function(x) return("foo for A"))
[1] "foo"
>
> a=new("A")
> b=new("B")
> foo(a)
[1] "foo for A"
> foo(b)
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "foo", for signature "B"
> setGeneric("foo", function(x) standardGeneric("foo"))
[1] "foo"
> setMethod("foo", signature(x="B"), function(x) return("foo for B"))
[1] "foo"
>
> setGeneric("foo", function(x) standardGeneric("foo"))
[1] "foo"
> setMethod("foo", signature(x="B"), function(x) return("foo for B"))
[1] "foo"
> foo(a)
# here's where the disappearance of the prior setMethod shows
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "foo", for signature "A"
> foo(b)
[1] "foo for B"
So I guess I am going to pull the setGeneric's out. Ross
Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.
Archive generated by hypermail 2.2.0, at Wed 20 Jan 2010 - 12:50:17 GMT.
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.