[R] Problem with parser and if/else
    Thomas Lumley 
    tlumley at u.washington.edu
       
    Fri Nov 14 16:24:28 CET 2003
    
    
  
On Fri, 14 Nov 2003, James MacDonald wrote:
>
> There are no violations to that rule in either lm or aov. It simply
> looks that way if you type lm or aov from within R. If you looked at the
> functions themselves using an editor, you would see that they all
> conform to
>
> if{
> ...
> }else{
> ...
> }
>
This turns out not to be the case. Looking for example at
lm() in src/library/base/R/lm.R
    if (is.empty.model(mt)) {
        x <- NULL
        z <- list(coefficients = numeric(0), residuals = y,
                  fitted.values = 0 * y, weights = w, rank = 0,
                  df.residual = length(y))
        if(!is.null(offset)) z$fitted.values <- offset
    }
    else {
        x <- model.matrix(mt, mf, contrasts)
        z <- if(is.null(w)) lm.fit(x, y, offset = offset,
                                   singular.ok=singular.ok, ...)
        else lm.wfit(x, y, w, offset = offset, singular.ok=singular.ok,
...)
    }
The *real* rule is that the } of the if() must not produce a syntactically
complete statement, so else on a separate line is ok inside functions.
I still tend to write } else {, but I'm sure it annoys some people.
	-thomas
    
    
More information about the R-help
mailing list