[R] passing an extra argument to an S3 generic

ilai keren at math.montana.edu
Sat Feb 11 18:00:32 CET 2012


You are setting a new class ("inflmlm") at the end of mlm.influence.
Remove that second to last line and enjoy your new S3 method.

I'm not sure, but I think it is just the new class "inflmlm" applied
to inf in the formals of hatvalues.mlm confused the dispatch
mechanism. You would think the error message will call the offending
class not "numeric" double" but that's above my pay grade...

You could probably put back the inflmlm class assignment with an
explicit call to UseMethod in hatvalues.mlm ?

Cheers

On Fri, Feb 10, 2012 at 2:35 PM, Michael Friendly <friendly at yorku.ca> wrote:
> On 2/10/2012 4:09 PM, Henrik Bengtsson wrote:
>>
>> So people may prefer to do the following:
>>
>> hatvalues.mlm<- function(model, m=1, infl, ...)
>> {
>>    if (missing(infl)) {
>>      infl<- mlm.influence(model, m=m, do.coef=FALSE);
>>    }
>>
>>    hat<- infl$H
>>    m<- infl$m
>>    names(hat)<- if(m==1) infl$subsets else apply(infl$subsets,1,
>> paste, collapse=',')
>>    hat
>> }
>
> Thanks;  I tried exactly that, but I still can't pass m=2 to the mlm method
> through the generic
>
>> hatvalues(Rohwer.mod)
>         1          2          3          4          5          6          7
>          8
> 0.16700926 0.21845327 0.14173469 0.07314341 0.56821462 0.15432157 0.04530969
> 0.17661104
>         9         10         11         12         13         14         15
>         16
> 0.05131298 0.45161152 0.14542776 0.17050399 0.10374592 0.12649927 0.33246744
> 0.33183461
>        17         18         19         20         21         22         23
>         24
> 0.17320579 0.26353864 0.29835817 0.07880597 0.14023750 0.19380286 0.04455330
> 0.20641708
>        25         26         27         28         29         30         31
>         32
> 0.15712604 0.15333879 0.36726467 0.11189754 0.30426999 0.08655434 0.08921878
> 0.07320950
>
>> hatvalues(Rohwer.mod, m=2)
> Error in UseMethod("hatvalues") :
>  no applicable method for 'hatvalues' applied to an object of class
> "c('double', 'numeric')"
>
> ## This works:
>> hatvalues.mlm(Rohwer.mod, m=2)
>   ... output snipped
>
>> hatvalues
>
> function (model, ...)
> UseMethod("hatvalues")
> <bytecode: 0x021339e4>
> <environment: namespace:stats>
>
>>
>
> -Michael
>
>
> --
> Michael Friendly     Email: friendly AT yorku DOT ca
> Professor, Psychology Dept.
> York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
> 4700 Keele Street    Web:   http://www.datavis.ca
> Toronto, ONT  M3J 1P3 CANADA
>
>



More information about the R-help mailing list