Aaron Rendahl wrote:> I'm seeing some funny behavior when using methods (the older S3 type)
> and having variables that start with the same letter. I have a vague
> recollection of reading something about this once but now can't seem
> to find anything in the documentation. Any explanation, or a link to
> the proper documentation, if it does exist, would be appreciated.
>
> Thanks, Aaron Rendahl
> University of Minnesota School of Statistics
>
>
> # set up two function that both use method "foo" but with
different
> variable names
> fooA<-function(model,...)
> UseMethod("foo")
> fooB<-function(Bmodel,...)
> UseMethod("foo")
>
> # now set up two methods (default and character) that have an
> additional variable
> foo.character <- function(model, m=5,...)
> cat("foo.character: m is", m, "\n")
> foo.default <- function(model, m=5,...)
> cat("foo.default: m is", m, "\n")
>
> # both of these use foo.character, as expected
> fooA("hi")
> fooB("hi")
>
> # but here, fooA uses foo.default instead
> fooA("hi",m=1)
> fooB("hi",m=1)
>
> # additionally, these use foo.character, as expected
> fooA("hi",1)
> fooA(model="hi",m=1)
This is partial matching on argument names, a feature regretted by its
designers, but a feature nevertheless.
It has nothing to do with S3 as such, it is just that fooA("hi",m=1)
matches "m" to "model" and believes that you meant
fooA("hi", model=1).
It often bites people in S3 methods though, because in most other cases,
you can put the arguments after "..." where they require exact
matching
(consider the naming forms of c() and cbind(), for instance).
--
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907