From Bill.Venables@cmis.csiro.au  Tue Jul 13 06:13:46 1999
From: Bill.Venables@cmis.csiro.au (Bill.Venables@cmis.csiro.au)
Date: Tue, 13 Jul 1999 07:13:46 +0200 (MET DST)
Subject: glm code bug (PR#224)
Message-ID: <199907130513.HAA16802@pubhealth.ku.dk>

Peter,

There is a clear and simple bug in glm() that I have noticed in
0.64.2 (Windows and Unix) but may have been present in earlier
versions.

The function starts as follows:

> glm
function (formula, family = gaussian, data = list(), weights = NULL, 
    subset = NULL, na.action = na.fail, start = NULL, offset = NULL, 
    control = glm.control(...), model = TRUE, method = "glm.fit", 
    x = FALSE, y = TRUE, contrasts = NULL, ...) 
{
    call <- match.call(expand.dots = FALSE)	### <<<<----------------------------
    ## family
    if (is.character(family)) 
        family <- get(family)
    if (is.function(family)) 
        family <- family()
    ## extract x, y, etc from the model formula and frame
    if (is.null(family$family)) {
        print(family)
        stop("`family' not recognized")
    }
    mt <- terms(formula, data = data)
    if (missing(data)) 
        data <- sys.frame(sys.parent())
    mf <- match.call()				### <<<<----------------------------
    mf$family <- mf$start <- mf$control <- mf$maxit <- NULL
    mf$model <- mf$method <- mf$x <- mf$y <- mf$contrasts <- NULL
    mf$... <- NULL

######

The two marked lines should clearly be

    call <- match.call()

and

    mf <- match.call(expand.dots = FALSE)

The error in the first line can case problems with update() (I
suspect) but the error in the second line does not allow isolated
control arguments (like trace = T) to appear on the main call as
they get passed on to the call to model.frame, causing
pandemonium.  As a confirmation of the second change above,
unless you do have (expand.dots = FALSE) the last line quoted
above has no effect.

Regards,
Bill Venables.

-- 
-----------------------------------------------------------------
Bill Venables, Statistician, CMIS Environmetrics Project.

Physical address:                            Postal address:
CSIRO Marine Laboratories,                   PO Box 120,       
233 Middle St, Cleveland, Queensland         Cleveland, Qld, 4163
AUSTRALIA                                    AUSTRALIA

Telephone: +61 7 3826 7251     Email: Bill.Venables@cmis.csiro.au     
      Fax: +61 7 3826 7304

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


glm code bug (PR#224)
Bill.Venables@cmis.csiro.au