-----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:
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