Skip to content

How to format R superscript 2 followed by "=" value

2 messages · Nevil Amos, Joshua Wiley

#
I am trying to put  an
R2 value with R2 formatted with a superscript 2 followed by "=" and the 
value :
the first mtext prints the R2 correctly formatted but follows it with 
"=round(summary(mylm)$r.squared,3)))" as text
the second prints "R^2 =" followed by the value of 
round(summary(mylm)$r.squared,3))).

how do I correctly write the expression to get formatted r2 followed by 
the value?




x=runif(10)
y=runif(10)
summary(mylm<-lm(y~x))
plot(x,y)
abline(mylm)
mtext(expression(paste(R^2,"=",round(summary(mylm)$r.squared,3))),1)
mtext(paste(expression(R^2),"=",round(summary(mylm)$r.squared,3)),3)



thanks

Nevil Amos
#
Hi Nevil,

Here is one option:


################################
## function definition
r2format <- function(object, digits = 3, output, sub, expression = TRUE, ...) {
  if (inherits(object, "lm")) {
    x <- summary(object)
  } else if (inherits(object, "summary.lm")) {
    x <- object
  } else stop("object is an unmanageable class")
  out <- format(x$r.squared, digits = digits)

  if (!missing(output)) {
    output <- gsub(sub, out, output)
  } else {
    output <- out
  }
  if (expression) {
    output <- parse(text = output)
  }
  return(output)
}

## model
m <- lm(mpg ~ hp * wt, data = mtcars)

## demonstration
r2format(object = m, output = "R^2 == rval", sub = "rval", expression = TRUE)

## your problem
x <- runif(10)
y <- runif(10)
mylm <- lm(y ~ x)
plot(x, y)
abline(mylm)
## simplified version of demo
mtext(r2format(m, 3, "R^2 == rval", "rval"), 3)

################################

The real key is using == instead of "=".  The lengthy response is
because I have been toying with and working with different stylers and
formatters to try to facilitate getting output from R into publication
format so I was interested in playing with this and thinking what
might be useful abstractions.  Anyway, more specific to your useage
might be something like:

substitute(expression(R^2 == rval), list(rval =
round(summary(mylm)$r.squared,3)))

Cheers,

Josh
On Sun, Oct 2, 2011 at 9:49 PM, Nevil Amos <nevil.amos at gmail.com> wrote: