Hello, everybody. I recognize I'm asking you to deal with a not-very-important problem. But its important to me :)
I've noticed a little inconsistency in the print.function() output. I traced the matter to deparse.c, for which I attach a patch that addresses 3 separate things. There's one important thing that I'm willing to stand behind and 2 litter things that I think would be good, but won't argue too much about. I ask if this is a legitimate wishlist item in your bug tracker. Here are the changes I'm trying to achieve. 1. I want this: } else { and not the current } else { 2 & 3. I want to omit space after if and for. Since if and for are functions in R, not keywords, I suggest that there should not be a space before the opening parentheses. Item 1 brings the output into line with the advice of the help page for "if". The output looks more like the a randomly selected R file from the R source or the recommended packages. I'm teaching new users that they should study the R source code itself as a guide for programming (http://pj.freefaculty.org/R/Rstyle.pdf). My argument there would go more smoothly if print.function obeyed the "} else {" policy that most of your source code and packages adhere to. We do see r-help questions about the problem that user code can't be run line-by-line, even when it is styled like the print.function() output. As you know, this is discussed in R Extensions Section 3.1 on tidying R code. In my opinion, the current approach makes code less tidy, rather than more. Consider an excerpt from the top of predict.glm.R. This R code is correctly formatted, it is consistent with most of the rest of R: if (!se.fit) { ## No standard errors if(missing(newdata)) { pred <- switch(type, link = object$linear.predictors, response = object$fitted.values, terms = predict.lm(object, se.fit=se.fit, scale = 1, type="terms", terms=terms) ) if(!is.null(na.act)) pred <- napredict(na.act, pred) } else { But the output from '> predict.glm' is not as good: if (!se.fit) { if (missing(newdata)) { pred <- switch(type, link = object$linear.predictors, response = object$fitted.values, terms = predict.lm(object, se.fit = se.fit, scale = 1, type = "terms", terms = terms)) if (!is.null(na.act)) pred <- napredict(na.act, pred) } else { I have applied the attached patch with R 3.0.0. I don't see any damage from it, just more tidier output: > predict.glm function (object, newdata = NULL, type = c("link", "response", "terms"), se.fit = FALSE, dispersion = NULL, terms = NULL, na.action = na.pass, ...) { type <- match.arg(type) na.act <- object$na.action object$na.action <- NULL if(!se.fit) { if(missing(newdata)) { pred <- switch(type, link = object$linear.predictors, response = object$fitted.values, terms = predict.lm(object, se.fit = se.fit, scale = 1, type = "terms", terms = terms)) if(!is.null(na.act)) pred <- napredict(na.act, pred) } else { pred <- predict.lm(object, newdata, se.fit, scale = 1, type = ifelse(type == "link", "response", type), terms = terms, na.action = na.action) switch(type, response = { pred <- family(object)$linkinv(pred) }, link = , terms = ) } } else { Of course, you know much better than I do what else might break as a result of this change. In case the email list processor scrubs the patch, please try here: http://pj.freefaculty.org/scraps/deparse-pj-20130417.patch 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
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel