[R] Typo in print.aov

peter dalgaard pd@|gd @end|ng |rom gm@||@com
Mon Aug 13 18:11:02 CEST 2018


That's a bug... no other place in the sources has "coeffficients". The net result is that the NULL case is used even when colnames _are_ present. It does make a difference, e.g. to examples(manova). I am fixing this in r-devel since the urgency must be rather low.

- Peter D.

> On 13 Aug 2018, at 14:27 , Andrews, Chris <chrisaa using med.umich.edu> wrote:
> 
> 
> While looking at the code of print.aov for a different reason, I noticed that 'coefficient' was spelled with 3 'f's in one location.  Perhaps this is on purpose but in another location it has just 2 'f's.  This has not caused me any problem (that I know of) but I found it curious.
> 
> Chris
> 
> 
> 
> R version 3.5.1 (2018-07-02) -- "Feather Spray"
> Copyright (C) 2018 The R Foundation for Statistical Computing
> Platform: x86_64-w64-mingw32/x64 (64-bit)
> 
> 
> 
> 
>> getAnywhere(print.aov)
> A single object matching 'print.aov' was found
> It was found in the following places
>  registered S3 method for print from namespace stats
>  namespace:stats
> with value
> 
> function (x, intercept = FALSE, tol = sqrt(.Machine$double.eps), 
>    ...) 
> {
>    if (!is.null(cl <- x$call)) {
>        cat("Call:\n   ")
>        dput(cl, control = NULL)
>    }
>    qrx <- if (x$rank) 
>        qr(x)
>    asgn <- x$assign[qrx$pivot[1L:x$rank]]
>    effects <- x$effects
>    if (!is.null(effects)) 
>        effects <- as.matrix(effects)[seq_along(asgn), , drop = FALSE]
>    rdf <- x$df.residual
>    resid <- as.matrix(x$residuals)
>    wt <- x$weights
>    if (!is.null(wt)) 
>        resid <- resid * sqrt(wt)
>    RSS <- colSums(resid^2)
>    uasgn <- unique(asgn)
>    nmeffect <- c("(Intercept)", attr(x$terms, "term.labels"))[1 + 
>        uasgn]
>    nterms <- length(uasgn)
>    nresp <- NCOL(effects)
>    df <- numeric(nterms)
>    ss <- matrix(NA, nterms, nresp)
>    if (nterms) {
>        for (i in seq(nterms)) {
>            ai <- asgn == uasgn[i]
>            df[i] <- sum(ai)
>            ef <- effects[ai, , drop = FALSE]
>            ss[i, ] <- if (sum(ai) > 1) 
>                colSums(ef^2)
>            else ef^2
>        }
>        keep <- df > 0L
>        if (!intercept && uasgn[1L] == 0) 
>            keep[1L] <- FALSE
>        nmeffect <- nmeffect[keep]
>        df <- df[keep]
>        ss <- ss[keep, , drop = FALSE]
>        nterms <- length(df)
>    }
>    cat("\nTerms:\n")
>    if (nterms == 0L) {
>        if (rdf > 0L) {
>            ss <- RSS
>            ssp <- sapply(ss, format)
>            if (!is.matrix(ssp)) 
>                ssp <- t(ssp)
>            tmp <- as.matrix(c(ssp, format(rdf)))
>            if (length(ss) > 1L) {
>                rn <- colnames(x$fitted.values)
>                if (is.null(rn)) 
>                  rn <- paste("resp", seq_along(ss))
>            }
>            else rn <- "Sum of Squares"
>            dimnames(tmp) <- list(c(rn, "Deg. of Freedom"), "Residuals")
>            print(tmp, quote = FALSE, right = TRUE)
>            cat("\n")
>            rs <- sqrt(RSS/rdf)
>            cat(if (length(rs) > 1L) 
>                "Residual standard errors:"
>            else "Residual standard error:", sapply(rs, format))
>            cat("\n")
>        }
>        else print(matrix(0, 2L, 1L, dimnames = list(c("Sum of Squares", 
>            "Deg. of Freedom"), "<empty>")))
>    }
>    else {
>        if (rdf > 0L) {
>            nterms <- nterms + 1L
>            df <- c(df, rdf)
>            ss <- rbind(ss, RSS)
>            nmeffect <- c(nmeffect, "Residuals")
>        }
>        ssp <- apply(zapsmall(ss), 2L, format)
>        tmp <- t(cbind(ssp, format(df)))
>        if (ncol(effects) > 1L) {
>            rn <- colnames(x$coeffficients) ###############************ <------- HERE
>            if (is.null(rn)) 
>                rn <- paste("resp", seq(ncol(effects)))
>        }
>        else rn <- "Sum of Squares"
>        dimnames(tmp) <- list(c(rn, "Deg. of Freedom"), nmeffect)
>        print(tmp, quote = FALSE, right = TRUE)
>        rank <- x$rank
>        cat("\n")
>        if (rdf > 0L) {
>            rs <- sqrt(RSS/rdf)
>            cat(if (length(rs) > 1L) 
>                "Residual standard errors:"
>            else "Residual standard error:", sapply(rs, format))
>            cat("\n")
>        }
>        coef <- as.matrix(x$coefficients)[, 1L]  ################## ************ <- NOT HERE
>        R <- qrx$qr
>        R <- R[1L:min(dim(R)), , drop = FALSE]
>        R[lower.tri(R)] <- 0
>        if (rank < (nc <- length(coef))) {
>            cat(paste(nc - rank, "out of", nc, "effects not estimable\n"))
>            R <- R[, 1L:rank, drop = FALSE]
>        }
>        d2 <- sum(abs(diag(R)))
>        diag(R) <- 0
>        if (sum(abs(R))/d2 > tol) 
>            cat("Estimated effects may be unbalanced\n")
>        else cat("Estimated effects are balanced\n")
>        if (nzchar(mess <- naprint(x$na.action))) 
>            cat(mess, "\n", sep = "")
>    }
>    invisible(x)
> }
> <bytecode: 0x0000000014c90ca0>
> <environment: namespace:stats>
> 
> 
> **********************************************************
> Electronic Mail is not secure, may not be read every day, and should not be used for urgent or sensitive issues 
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com




More information about the R-help mailing list