[R] anova.gls from nlme on multiple arguments within a function fails
Spencer Graves
spencer.graves at pdf.com
Mon Nov 28 18:01:03 CET 2005
Dear Prof. Ripley:
Thanks very much. I tried several superficially similar things but
not either of the solutions you suggest.
Best Wishes,
spencer graves
Prof Brian Ripley wrote:
> 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
>>
>
--
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
More information about the R-help
mailing list