Skip to content

How to paste a vector of expressions and a character vector?

6 messages · Marius Hofert, David Winsemius

#
Dear expeRts,

I know I can't paste expressions in the normal way, but I just couldn't figure out 
how to get the following (I want to paste a character vector to an expression vector)
right with bquote() or substitute.

vec1 <- c("a", expression(tilde(b)), "c")
vec2 <- c("1", "2", "3")
main <- as.expression(paste(vec1, vec2))
plot(0,0, main=main[2])

Cheers,

Marius
#
On Apr 1, 2011, at 12:32 PM, Marius Hofert wrote:

            
Do not use `paste` ... it coerces your expression to a character  
value ... use `c` instead:

 > main <- as.expression(c(vec1, vec2))
 > plot(1,1, main=main[2])

And then, even the as.expression is superfluous:

 > main <- c(vec1, vec2)
 > plot(1,1, main=main[2])
#
Dear David,

thanks for your reply. The paste() meant to paste the vectors vec1 and vec2 together, so main should be a vector of length 3 of the form
"a 1", "b 2", "c 3" # with b being tilde(b)
However, with c() it is a vector of length 6:
expression("a", tilde(b), "c", "1", "2", "3")

Do you know a solution for that?

Cheers,

Marius
On 2011-04-01, at 19:22 , David Winsemius wrote:

            
#
On Apr 1, 2011, at 1:56 PM, Marius Hofert wrote:

            
lls <-c("a", "tilde(b)","c")
  mains <- bquote(.(parse(text=paste(lls,"~",nns,sep=""))) )
  mains

#expression(a~1, tilde(b)~2, c~3)
#attr(,"srcfile")
<text>
attr(,"wholeSrcref")
a~1
tilde(b)~2
c~3
#-----

 > mains[2]
#expression(tilde(b)~2)


plot(0,0, main=mains[2])


This would also work:

 > mains2 <- as.expression(parse(text=paste(lls,"~",nns,sep="")))
 > mains2
expression(a~1, tilde(b)~2, c~3)
attr(,"srcfile")
<text>
attr(,"wholeSrcref")
a~1
tilde(b)~2
c~3

I try to avoid using spaces in expressions and instead use "~"'s   
because I don't really understand how spaces get parsed in expression  
operations, and I do know how plotmath operations work with "~".
David Winsemius, MD
West Hartford, CT
#
On Apr 1, 2011, at 2:34 PM, David Winsemius wrote:

            
Forgot one variable, nns:
nns <-1:3
David Winsemius, MD
West Hartford, CT
#
On Apr 1, 2011, at 2:34 PM, David Winsemius wrote:

            
nns <- 1:3

#Even easier would be:

 > mains3 <- parse(text=paste(lls,"~",nns,sep=""))
 > mains3
expression(a~1, tilde(b)~2, c~3)
attr(,"srcfile")
<text>
attr(,"wholeSrcref")
a~1
tilde(b)~2
c~3
David Winsemius, MD
West Hartford, CT