[R] expressions (nesting, substitution, 2-stage evaluation)

William Dunlap wdunlap at tibco.com
Fri Feb 28 16:19:30 CET 2014


> e.g. this doesn't work:
> 
> vectorA = c( bquote("TNF-"*alpha), bquote("IFN-"*gamma) )
> 
> for(ii in vectorA)  {
>     plot(0:1,0:1)
>     title(main = paste("asdfsadf",ii))
> }

Use bquote's .() operator in the call to plot() or title(), as in:
 par(mfrow=c(2,1)) 
 for(ii in vectorA) {
      plot(0:1,0:1,main=bquote(.(ii) ~ cm/sec^2))
  }

Bill Dunlap
TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Daryl Morris
> Sent: Thursday, February 27, 2014 5:37 PM
> To: David Winsemius; Bert Gunter
> Cc: r-help at r-project.org
> Subject: Re: [R] expressions (nesting, substitution, 2-stage evaluation)
> 
> Hi,
> 
> Both your code and my code work when I don't combine things.  The
> problem is when I want to combine an expression (or a bquote in your
> example) with something else
> 
> e.g. this doesn't work:
> 
> vectorA = c( bquote("TNF-"*alpha), bquote("IFN-"*gamma) )
> 
> for(ii in vectorA)  {
>     plot(0:1,0:1)
>     title(main = paste("asdfsadf",ii))
> }
> 
> because as soon as I've made an expression, I can no longer append it to
> something else.  While in this example I could have had the "asdfsadf"
> in the original bquote, there are reasons I need to build the ultimate
> label at a separate point than I define the labels (I mix and match
> things multiple ways inside the code).
> 
> So, the thing I'm really trying to do is a 2-stage evaluation of an
> expression, aka a nested expression evaluation, or a substition of
> expressions.  I've tried things like deparse, but so far haven't found
> the magic.
> 
> thanks, Daryl
> 
> 
> On 2/27/14 5:17 PM, David Winsemius wrote:
> > On Feb 27, 2014, at 3:17 PM, Bert Gunter wrote:
> >
> >> >?plotmath
> >> >
> >> >-- Bert
> > Daryl;;
> >
> > I think what Bert was hoping you would do was read the plotmath page and figure it
> out on your own but that can be a bit tricky when working with expression object
> vectors. Here is (perhaps) a step forward:
> >
> > vectorA = c( bquote("TNF-"*alpha), bquote("IFN-"*gamma) )
> >
> > for(ii in vectorA)  {
> >    plot(0:1,0:1)
> >    title(main = ii)
> >   }
> >
> > Now as Jim Holtman is fond of saying... what problem were you (really) trying to solve?
> >
> > -- David.
> >> >
> >> >Bert Gunter
> >> >Genentech Nonclinical Biostatistics
> >> >(650) 467-7374
> >> >
> >> >"Data is not information. Information is not knowledge. And knowledge
> >> >is certainly not wisdom."
> >> >H. Gilbert Welch
> >> >
> >> >
> >> >
> >> >
> >> >On Thu, Feb 27, 2014 at 2:58 PM, Daryl Morris<darylm at uw.edu>  wrote:
> >>> >>Hi,
> >>> >>
> >>> >>I have a function which generates many plots.  To keep it simple, let's say
> >>> >>I want to set the main title based on where we are in nested loops.
> >>> >>
> >>> >>So, something like
> >>> >>
> >>> >>vectorA = c("a","b","c")
> >>> >>vectorB = c("a","b","c")
> >>> >>
> >>> >>for(ii in vectorA) { for(jj in vectorB) {
> >>> >>  plot(0:1,0:1)
> >>> >>  title(main = paste(ii,jj))
> >>> >>}
> >>> >>
> >>> >>that part is easy!   The question is what if I wanted vectorA to be an
> >>> >>expression?
> >>> >>
> >>> >>I'd like to be able to set vectorA =
> >>> >>c(expression(paste("TNF-",alpha)),expression(paste("IFN-",gamma))), and have
> >>> >>the plot title show the greek letters.
> >>> >>
> >>> >>Obviously, in the for-loop I could build the expression all at once, but
> >>> >>there are lots of programmatic reasons I'd like to be able to have this
> >>> >>program structure.  Is there a solution which modifies either/both (1) the
> >>> >>setting of main in the loop (2) how I define the vector outside of the loop?
> >>> >>
> >>> >>
> >>> >>thanks, Daryl
> >>> >>
> >>> >>______________________________________________
> >>> >>R-help at r-project.org  mailing list
> >>> >>https://stat.ethz.ch/mailman/listinfo/r-help
> >>> >>PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> >>> >>and provide commented, minimal, self-contained, reproducible code.
> >> >
> >> >______________________________________________
> >> >R-help at r-project.org  mailing list
> >> >https://stat.ethz.ch/mailman/listinfo/r-help
> >> >PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> >> >and provide commented, minimal, self-contained, reproducible code.
> > David Winsemius
> > Alameda, CA, USA
> >
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list