[R] creating functions question

AC Del Re delre at wisc.edu
Mon Feb 15 20:57:00 CET 2010


 Perfect!

 Thank you, Dimitris.

 AC


 On Mon, Feb 15, 2010 at 1:45 PM, Dimitris Rizopoulos
 <d.rizopoulos at erasmusmc.nl> wrote:
> try this:
>
> MRfit <- function (...) {
>    models <- list(...)
>>    do.call(anova, models)
>> }
>>
>>
>> I hope it helps.
>>
>> Best,
>> Dimitris
>>
>>
>> AC Del Re wrote:
>>>
>>> Hi All,
>>>
>>> I am interested in creating a function that will take x number of  lm
>>> objects and automate the comparison of each model (using anova). Here
>>> is a simple example (the actual function will involve more than what
>>> Im presenting but is irrelevant for the example):
>>>
>>> # sample data:
>>>
>>> id<-rep(1:20)
>>> n<-c(10,20,13,22,28,12,12,36,19,12,36,75,33,121,37,14,40,16,14,20)
>>> r<-c(.68,.56,.23,.64,.49,-.04,.49,.33,.58,.18,-.11,.27,.26,.40,.49,
>>> .51,.40,.34,.42,.16)
>>> mod2<-factor(c(rep(c(1,2,3,4),5)))
>>> da<-data.frame(id, n, r, mod1, mod2)
>>>
>>>
>>> reg0<-lm(da$r ~ 1)
>>> reg1<-lm(da$r ~ da$mod1)
>>> reg2<-lm(da$r ~ da$mod1 + da$mod2)
>>>
>>> # This is as far as I get with the function:
>>>
>>> MRfit <- function( ...) {
>>>  models <- list(...)
>>>  fit<- anova(models)
>>>  return(fit)
>>> }
>>>
>>> MRfit(reg0,reg1,reg2)
>>>
>>> # This is what I get from R:
>>>
>>> #  Error in UseMethod("anova") :
>>> #  no applicable method for 'anova' applied to an object of class "list"
>>>
>>> # which makes sense, but Im not sure how to work with this list
>>> considering the desired output.
>>> # Ideally I would like to get:
>>>
>>> MRfit(reg0,reg1,reg2)   # I know that I could just do anova(reg0,reg1,
>>> reg2) but the actual function will have additional functions
>>> integrated
>>>
>>> Analysis of Variance Table
>>>
>>> Model 1: da$r ~ 1
>>> Model 2: da$r ~ da$mod1
>>> Model 3: da$r ~ da$mod1 + da$mod2
>>>
>>>  Res.Df     RSS Df Sum of Sq      F Pr(>F)
>>> 1     19 0.83848
>>> 2     18 0.78668  1  0.051803 1.1230 0.3060
>>> 3     15 0.69193  3  0.094747 0.6847 0.5752
>>>
>>>
>>> Any help is much appreciated!
>>>
>>> Thank you,
>>>
>>> AC
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>> --
>> Dimitris Rizopoulos
>> Assistant Professor
>> Department of Biostatistics
>> Erasmus University Medical Center
>>
>> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
>> Tel: +31/(0)10/7043478
>> Fax: +31/(0)10/7043014
>>
>



More information about the R-help mailing list