[R] anova.gls from nlme on multiple arguments within a function fails

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Nov 28 11:44:27 CET 2005


The error is in anova.gls(): traceback() would have told you that was 
involved.  It ends

do.call("anova.lme", as.list(match.call()[-1]))

and that call needs to be evaluated in the parent, not in the body of 
anova.lme.  Several similar errors (e.g. in the update methods) in package 
nlme have been corrected over the years.

Replacing anova() by anova.lme() in dummy() works.

If you want to do this sort of thing more generally (e.g. messing with 
the contents of '...'), the elegant way is

Call <- match.call()
Call[[1]] <- as.name("anova.lme")
eval.parent(Call)

and that works here.

Since at some later point substitute() is used to find the arguments, here 
you don't want to use do.call() with the evaluated arguments, which is the 
way it is intended to be used.  Similarly, anova.lme(object, ...) is not 
what you want.


On Sun, 27 Nov 2005, Spencer Graves wrote:

> 	  You've posed an excellent question with simple and elegant,
> reproducible example.  I've seen no replies, so I will attempt a partial
> response.  RSiteSearch("lexical scoping") produced some potentially
> useful comments (e.g.,
> http://finzi.psych.upenn.edu/R/Rhelp02a/archive/37769.html), but nothing
> that allowed me to work around the problem.
>
> 	  The following modification of your example makes it clear that
> "anova.lme" (called by "anova.gls") choked on the second argument not
> the first:

It actually chokes on both.

> > dummy2 <- function(obj)
> +   {
> +     obj2 <- obj[[2]]
> +     anova(obj[[1]], obj2)
> +   }
> > dummy2(list(fm1, fm2))
> Error in anova.lme(object = obj[[1]], obj2) :
> 	object "obj2" not found
>
> 	  The following helped isolate this further to "dots <- list(...)", the
> second line in "anova.lme":
>
> debug(anova.lme)
> dummy2(list(fm1, fm2))
>
> 	  I don't know why your example fails, especially "anova.lm" worked.
> Also, there should be a way  to use something like "assign" to work
> around this problem, but nothing I tried worked.
>
> 	  I know this is not a complete reply, but I hope it helps.
> 	  spencer graves
>
> Markus Jantti wrote:
>
>> Dear All --
>>
>> I am trying to use within a little table producing code an anova
>> comparison of two gls fitted objects, contained in a list of such
>> object, obtained using nlme function gls.
>> The anova procedure fails to locate the second of the objects.
>>
>> The following code, borrowed from the help page of anova.gls,
>> exemplifies:
>> --------------- start example code ---------------
>> library(nlme)
>>
>> ## stolen from example(anova.gls)
>> # AR(1) errors within each Mare
>> fm1 <- gls(follicles ~ sin(2*pi*Time) + cos(2*pi*Time), Ovary,
>>            correlation = corAR1(form = ~ 1 | Mare))
>> anova(fm1)
>> # variance changes with a power of the absolute fitted values?
>> fm2 <- update(fm1, weights = varPower())
>> anova(fm1, fm2)
>>
>> ## now define a little function
>> dummy <- function(obj)
>>   {
>>     anova(obj[[1]], obj[[2]])
>>   }
>> dummy(list(fm1, fm2))
>>
>> ## compare with what happens in anova.lm:
>>
>> lm1 <- lm(follicles ~ sin(2*pi*Time), Ovary)
>> lm2 <- lm(follicles ~ sin(2*pi*Time) + cos(2*pi*Time), Ovary)
>> dummy(list(lm1, lm2))
>> ------------- end example code ------------------
>>
>> It is not the end of the world: I can easily work around this.
>> But it would be nice to know why this does not work.
>>
>> Digging around using options(error=recover) did not help my much, I'm
>> afraid.
>>
>> Best,
>>
>> Markus
>
> -- 
> Spencer Graves, PhD
> Senior Development Engineer
> PDF Solutions, Inc.
> 333 West San Carlos Street Suite 700
> San Jose, CA 95110, USA
>
> spencer.graves at pdf.com
> www.pdf.com <http://www.pdf.com>
> Tel:  408-938-4420
> Fax: 408-280-7915
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list