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]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel