[R] How to change the significant codes default?

Gabor Grothendieck ggrothendieck at myway.com
Sun Nov 21 19:41:41 CET 2004


Uwe Ligges <ligges <at> statistik.uni-dortmund.de> writes:

: 
: (Ted Harding) wrote:
: 
: > On 20-Nov-04 Uwe Ligges wrote:
: > 
: >>Shigeru Mase wrote:
: >>
: >>>Dear R experts,
: >>>
: >>>I am posting this question on behalf of a Japanese R user
: >>>who wants to know how to change the siginificant codes default.
: >>>As you know, R's default significant codes are:
: >>>
: >>> Signif. codes:  0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
: >>>
: >>>But he says that it is usual in economics to give codes such as
: >>>
: >>> `***' for 0.01, `**' for 0.05 and `*' for 0.10
: >>>
: >>>I don't know if this is true (common) or not, but what I as well
: >>>as he are puzzled is that, apparently, there is no part in the code,
: >>>say that of summary.lm, which produces these significant codes
: >>>as well as the annotation above. A quick search of "rking" using
: >>>keywords "significant codes star" gave me no information.
: >>>
: >>>Thanks in advance.
: >>
: >>For example, calling summary(lmObject) dispatches on method
: >>summary.lm() 
: >>hwich creates an object of class "summary.lm".
: >>The latter is printed by method print.summary.lm() which calls 
: >>printCoefmat().
: >>
: >>The stars are hard-coded there, and I don't think anybody is going to 
: >>change that. I suggest to turn of the printing of siginificant codes by
: >>specifying
: >>   print(summary(.....), signif.stars = FALSE)
: >>or by setting the corresponding option().
: >>
: >>Uwe Ligges
: > 
: > 
: > It would be possible to re-define 'printCoefmat' privately
: > so as to change the lines
: > 
: >       cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
: >       symbols = c("***", "**", "*", ".", " "))
: > 
: > towards the end of its code into whatever you prefer, e.g.
: > 
: >       cutpoints = c(0, 0.01, 0.05, 0.1, 1),
: >       symbols = c("***", "**", "*", " "))
: > 
: > or
: > 
: >       cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
: >       symbols = c("****", "***", "**", "*", " "))
: > 
: > (both of which are compatible with your description of what
: > is needed).
: > 
: > The most straightforward way of redefining it is to copy
: > the code for 'printCoefmat' into a file, e.g.
: > 
: >   sink("printCoefmat.R")
: >   printCoefmat
: >   sink()
: > 
: > and then edit that file.
: > NOTE that the code written to the file does not include
: > the name of the function, i.e. it starts
: > 
: >   function (x, digits = max(3, getOption("digits") - 2),....
: > 
: > so the first modification has to be
: > 
: >   printCoefmat<-function(x, digits = .... )
: > 
: > Then, when you want your private version, simply do
: > 
: >   source("printCoefmat.R")
: > 
: > and it will overlay the original version. (Experts will have
: > to advise whether this clashes with any "namespace" issues.
: > On my reading of the code, it doesn't seem to; but I'm no
: > expert!)
: 
: Ted, it "clashes"! Functions in the namespace are looked up at first.
: 

True, but one can still get the effect by using assignInNamespace.
For example, run these two lines (the body(...) <- line is just for
illustration here.  You want to ultimately replace that line with your
redefined printCoefmat:  printCoefmat <- function... as discussed by Ted.)

body(printCoefmat) <- parse(text = "cat('Greetings from printCoefmat!!!')")
assignInNamespace("printCoefmat", printCoefmat, "stats")

Now running summary.lm as shown below displays the desired Greetings line:

R> example(lm)
...snip...
R> summary(lm.D90)

Call:
lm(formula = weight ~ group - 1)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.0710 -0.4938  0.0685  0.2462  1.3690 

Coefficients:
Greetings from printCoefmat!!!
Residual standard error: 0.6964 on 18 degrees of freedom
Multiple R-Squared: 0.9818,     Adjusted R-squared: 0.9798 
F-statistic: 485.1 on 2 and 18 DF,  p-value: < 2.2e-16




More information about the R-help mailing list