Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

adding ggtitle via do.call when argument is a language object

Tags:

r

ggplot2

do.call

Consider a simple function, which adds a ggtitle to a grob

f <- function(PLOT, TITLE) {
  PLOT + ggtitle(TITLE)
}

Calling the function directly works as expected.
However, calling the function via do.call(f, ..) throws an error when TITLE is a language object

## Sample Data
TIT <- bquote(atop("This is some text",  atop(italic("Here is some more text"))))
P   <- qplot(x=1:10, y=1:10, geom="point")

## WORKS FINE
f(P, TIT)

## FAILS
do.call(f, list(P, TIT))
## Error in labs(title = label) : could not find function "atop"

This of course only happens when TIT is a language object

TIT.char <- "This is some text\nHere is some more text"
do.call(f, list(P, TIT.char))
## No Error

How can do.call() be used correctly when arguments are language objects?

like image 862
Ricardo Saporta Avatar asked May 07 '15 17:05

Ricardo Saporta


People also ask

How to add subtitle to the plot using ggtitle() function in R?

Inside ggtitle () function, we can directly write the title that we want to add to the plot without defining any parameter but for add Subtitle to the plot using ggtitle () function, we have to use subtitle parameter to ggtitle () function and then assign the subtitle to that parameter.

What is an argument label in R?

The argument label is the text to be used for the main title or for the axis labels. ToothGrowth data is used in the following examples. Make sure that the variable dose is converted as a factor using the above R script.

How do I adjust the space between text lines in ggtitle?

p + ggtitle (label = "Effect of Vitamin C on Tooth Growth" , subtitle = "Plot of length by dose") If the title is too long, you can split it into two or multiple lines using . In this case you can adjust the space between text lines by specifying the argument lineheight in the theme function element_text ():

What is the difference between argument label and XLAB?

ggtitle(label) xlab(label) ylab(label) labs(...) The argument label is the text to be used for the main title or for the axis labels. ToothGrowth data is used in the following examples.


1 Answers

Use

do.call(f, list(P, TIT), quote=TRUE)

instead. The problem is that your expression is being evaluated when you run do.call. By setting quote=TRUE it will quote the arguments to leave them un-evaluated when passing them along to f. You can also explicitly quote TIT

do.call(f, list(P, quote(TIT)))
like image 198
MrFlick Avatar answered Oct 06 '22 19:10

MrFlick