Happy New Year I recognize this is a low priority issue, but... I'll fix it if you let me.
There are some TABs where R style calls for 4 spaces. For example R-3.0.2/src/library/stats/R/dummy.coef.R. I never noticed this until today, when I was stranded on a deserted island with only the R source code and a Swiss Army knife (vi). Now I realize my ~.vimrc has tabstop set at 2, and it makes tab indentations in R source "go backwards". if you are strictly following R Internals 9 "R Coding Standards", the TABs should be replaced with spaces, I shouldn't have to reconfigure the editor. Here's the way it looks in my vi dummy.coef.aovlist <- function(object, use.na = FALSE, ...) { Terms <- terms(object, specials="Error") err <- attr(Terms,"specials")$Error - 1 tl <- attr(Terms, "term.labels")[-err] int <- attr(Terms, "intercept") facs <- attr(Terms, "factors")[-c(1,1+err), -err, drop=FALSE] vars <- rownames(facs) xl <- attr(object, "xlevels") if(!length(xl)) { # no factors in model return(as.list(coef(object))) } nxl <- setNames(rep.int(1, length(vars)), vars) tmp <- unlist(lapply(xl, length)) nxl[names(tmp)] <- tmp lterms <- apply(facs, 2L, function(x) prod(nxl[x > 0])) nl <- sum(lterms) args <- setNames(vector("list", length(vars)), vars) for(i in vars) args[[i]] <- if(nxl[[i]] == 1) rep.int(1, nl) else factor(rep.int(xl[[i]][1L], nl), levels = xl[[i]]) dummy <- do.call("data.frame", args) pos <- 0 rn <- rep.int(tl, lterms) rnn <- rep.int("", nl) for(j in tl) { i <- vars[facs[, j] > 0] ifac <- i[nxl[i] > 1] if(length(ifac) == 0L) { # quantitative factor rnn[pos + 1] <- j } else if(length(ifac) == 1L) { # main effect dummy[ pos+1L:lterms[j], ifac ] <- xl[[ifac]] rnn[ pos+1L:lterms[j] ] <- as.character(xl[[ifac]]) [... snip ....] The patch looks like this in my vi: *** dummy.coef.R 2013-03-05 17:02:23.000000000 -0600 --- dummy.coef-indent.R 2014-01-02 21:49:25.828163544 -0600 *************** *** 28,35 **** Terms <- delete.response(Terms) vars <- all.vars(Terms) xl <- object$xlevels ! if(!length(xl)) { # no factors in model ! return(as.list(coef(object))) } nxl <- setNames(rep.int(1, length(vars)), vars) tmp <- unlist(lapply(xl, length)) ## ?? vapply(xl, length, 1L) --- 28,35 ---- Terms <- delete.response(Terms) vars <- all.vars(Terms) xl <- object$xlevels ! if(!length(xl)) { # no factors in model ! return(as.list(coef(object))) } nxl <- setNames(rep.int(1, length(vars)), vars) tmp <- unlist(lapply(xl, length)) ## ?? vapply(xl, length, 1L) *************** *** 38,64 **** nl <- sum(lterms) args <- setNames(vector("list", length(vars)), vars) for(i in vars) ! args[[i]] <- if(nxl[[i]] == 1) rep.int(1, nl) ! else factor(rep.int(xl[[i]][1L], nl), levels = xl[[i]]) dummy <- do.call("data.frame", args) pos <- 0 rn <- rep.int(tl, lterms) rnn <- rep.int("", nl) for(j in tl) { ! i <- vars[facs[, j] > 0] ! ifac <- i[nxl[i] > 1] ! if(length(ifac) == 0L) { # quantitative factor ! rnn[pos+1] <- j ! } else if(length(ifac) == 1L) { # main effect ! dummy[ pos+1L:lterms[j], ifac ] <- xl[[ifac]] ! rnn[ pos+1L:lterms[j] ] <- as.character(xl[[ifac]]) ! } else { # interaction ! tmp <- expand.grid(xl[ifac]) ! dummy[ pos+1L:lterms[j], ifac ] <- tmp ! rnn[ pos+1L:lterms[j] ] <- ! apply(as.matrix(tmp), 1L, function(x) paste(x, collapse=":")) ! } ! pos <- pos + lterms[j] } ## some terms like poly(x,1) will give problems here, so allow ## NaNs and set to NA afterwards. --- 38,64 ---- nl <- sum(lterms) args <- setNames(vector("list", length(vars)), vars) for(i in vars) ! args[[i]] <- if(nxl[[i]] == 1) rep.int(1, nl) ! else factor(rep.int(xl[[i]][1L], nl), levels = xl[[i]]) dummy <- do.call("data.frame", args) pos <- 0 rn <- rep.int(tl, lterms) rnn <- rep.int("", nl) for(j in tl) { ! i <- vars[facs[, j] > 0] ! ifac <- i[nxl[i] > 1] ! if(length(ifac) == 0L) { # quantitative factor ! rnn[pos+1] <- j ! } else if(length(ifac) == 1L) { # main effect ! dummy[ pos+1L:lterms[j], ifac ] <- xl[[ifac]] ! rnn[ pos+1L:lterms[j] ] <- as.character(xl[[ifac]]) ! } else { # interaction ! tmp <- expand.grid(xl[ifac]) ! dummy[ pos+1L:lterms[j], ifac ] <- tmp ! rnn[ pos+1L:lterms[j] ] <- ! apply(as.matrix(tmp), 1L, function(x) paste(x, collapse=":")) ! } ! pos <- pos + lterms[j] } [...snip...] I could make a patch that applies at the top level, maybe one for each library. If one of you will consider using it. Again, I recognize this is a small thing, the editor can be adjusted to avoid it. But it shouldn't be necessary. PJ -- Paul E. Johnson Professor, Political Science Assoc. Director 1541 Lilac Lane, Room 504 Center for Research Methods University of Kansas University of Kansas http://pj.freefaculty.org http://quant.ku.edu [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel