[R] variable names when using S3 methods
Peter Dalgaard
P.Dalgaard at biostat.ku.dk
Mon Apr 28 14:12:32 CEST 2008
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
More information about the R-help
mailing list