[R] Transferring commas in character vector to expression

William Dunlap wdunlap at tibco.com
Sun Jul 7 19:22:57 CEST 2013


> x.lab <- gsub(",","*symbol(\"\\\\54\")*", x.lab)

Wouldn't using just
   "*\",\"*"
instead of
   "*symbol(\"\\\\54\")*"
as the replacement do the same thing?
To me it is simpler to understand.

Note that this fails if the comma is the first or last
character in the input because '*something*' is
not a valid expression.  Another problem is that '**'
is parsed the same as "^", so "a**d" is displayed as
"a Delta superscript Delta d".  One way to deal with that
problem is to strip possible '*'s from the ends of
x.lab and convert '**'s to '*'s before giving it to the parser.
   x.lab <- gsub("^\\*|\\*$", "", x.lab)
   x.lab <- gsub("\\*\\*", "*", x.lab)
as in
f1 <- function (x.lab) 
{
    x.lab <- gsub("\\*", "*Delta*", x.lab)
    x.lab <- gsub(",", "*\",\"*", x.lab)
    x.lab <- gsub("^\\*|\\*$", "", x.lab)
    x.lab <- gsub("\\*\\*", "*", x.lab)
    parse(text = x.lab, keep.source = FALSE)
}
where the code in your mail corresponds to the function f0:
f0 <- function (x.lab) 
{
    x.lab <- gsub("\\*", "*Delta*", x.lab)
    x.lab <- gsub(",", "*symbol(\"\\\\54\")*", x.lab)
    parse(text = x.lab, keep.source = FALSE)
}

Another approach is not to turn the commas into strings, but
turn anything that is not a '*' into a string.  Then you don't have
to change your code when you discover that the inputs might
contain semicolons or something else.
f2 <- function (x.lab) 
{
    x.lab <- gsub("([^*]+)", " \"\\1\" ", x.lab)
    # I put spaces around things to make it a little more readable;
    # they may not be very readable in some fonts.
    x.lab <- gsub("\\*", " * Delta * ", x.lab)
    x.lab <- gsub("^ \\*|\\* $", "", x.lab)
    x.lab <- gsub("\\*  \\*", "*", x.lab)
    parse(text = x.lab, keep.source = FALSE)
}

Use it as in
   dotchart(1:4, labels=f2(c("***d", ",,c*", "a,*d", "****")))
This code gets ugly pretty quickly so you should bury it in a function.

Bill Dunlap
Spotfire, 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 Eric Archer - NOAA Federal
> Sent: Saturday, July 06, 2013 10:55 PM
> To: Duncan Mackay; r-help-r-project.org
> Subject: Re: [R] Transferring commas in character vector to expression
> 
> Duncan,
> 
> Thanks! That was the tip I needed. With that, I was able to get this to
> work perfectly:
> 
> x.lab <- c("a*a", "bbb", "c,cc*c", "d,dd")
> x.lab <- gsub("\\*", "*Delta*", x.lab)
> x.lab <- gsub(",", "*symbol(\"\\\\54\")*", x.lab)
> dotchart(1:length(x.lab), labels = parse(text = x.lab))
> 
> 
> 
> On Sat, Jul 6, 2013 at 9:38 PM, Duncan Mackay <mackay at northnet.com.au>wrote:
> 
> >  Eric
> >
> > How does this look - (you might have to add a few symbol("\54")  where
> > needed for me this give a comma on windows7  ver 3.1
> >
> >  xyplot(1:4 ~ 1:4, scales = list(x=list(at = 1:4, labels =
> >
> c(expression(a*a),expression(bbb),expression(c*Delta*cc*c),expression(d*Delta*symbol(
> "\54")*dd)
> > ) ) ) )
> >
> > I mostly use lattice and have forgotten how to do labels in basic plot so
> > have used lattice. should be similar and you can modify to suit.
> >
> > It was trial and error in going up through the numbers  from about 38
> >
> >
> > Duncan
> >
> > At 11:57 7/07/2013, you wrote:
> >
> > Duncan,
> >
> > Thanks for the suggestion, but that won't work for my situation. I'm
> > trying to use a character vector to label some axis ticks. There are some
> > elements in the vector that have either a comma, or both Greek symbols and
> > a comma, like the the third and fourth elements in x.lab below:
> >
> > > x <- 1:4
> > > x.lab <- c("a*a", "bbb", "c,cc*c", "d,dd")
> > > x.lab <- gsub("\\*", "*Delta*", x.lab)
> > > x.lab <- parse(text = x.lab)
> > Error in parse(text = x.lab) : <text>:3:2: unexpected ','
> > 2: bbb
> > 3: c,
> >    ^
> > > dotchart(x, labels = x.lab)
> >
> > The root problem that I'm stumped on is how to either:
> > 1) insert a comma into an expression and have it be read as a valid
> > character, or
> > 2) replace the comma in the character string with 'list(a, b, c)' as in
> > the help for plotmath and have it interpreted correctly.
> >
> > Cheers,
> > eric
> >
> >
> > On Sat, Jul 6, 2013 at 3:33 PM, Duncan Mackay <mackay at northnet.com.au >
> > wrote:
> >  Hi Eric
> >
> > I have not been following the thread but following on what David has said
> > on previous occasions
> >
> > try for example
> >
> > plot(1,1, ylab =  expression("aa aaa,aa bb"*Delta*"b cccc"*Delta*"cc, c") )
> >
> > Below is from a partly saved previous post of David's several months ago
> > which may give you some ideas
> >
> > DATA_names<-c(
> > "A mg kg",
> > "B mg kg",
> > "C mg kg",
> > "D mg kg",
> > "E mg kg",
> > "F mg kg",
> > "G mg kg",
> > "H mg kg")
> >
> > pos <- barplot(1:length(DATA_names))
> > text(x=pos,y=-1, xpd=TRUE, srt=45,
> >                     labels= sapply( gsub("mg kg", "(mg kg)^-1",
> > DATA_names),
> >                                     as.expression))
> >
> > HTH
> >
> > Duncan
> >
> >
> > Duncan Mackay
> > Department of Agronomy and Soil Science
> > University of New England
> > Armidale NSW 2351
> > Email: home: mackay at northnet.com.au
> >
> >
> >
> >
> > At 07:47 6/07/2013, you wrote:
> >  I'm trying to format a given character vector as an expression with Greek
> > symbols to be used in labeling axis ticks. Thanks to some help from David
> > Winsemius, I've learned how to make the substitution and place the Greek
> > symbols in, however I've run into another problem: Some of my labels have
> > commas in them, so when the parse command is executed, there is an
> > unexpected symbol error. For example:
> >
> > > x <- c("aa", "aaa,aa", "bb*Delta*b", "cccc*Delta*cc,c")
> > > parse(text = x)
> > Error in parse(text = x) : <text>:2:4: unexpected ','
> > 1: aa
> > 2: aaa,
> >      ^
> >
> > I've tried various iterations of wrapping the commas in interior quotes
> > ("aaa\",\"aa"), but then the error shifts to the quote. I see in plotmath
> > that 'list(a,b,c)' gives me comma separated values, but I haven't been able
> > to work out how to get this construction for elements that have a comma.
> >
> > Is this possible?
> >
> > --
> >
> > Eric Archer, Ph.D.
> > Southwest Fisheries Science Center
> > NMFS, NOAA
> > 8901 La Jolla Shores Drive
> > La Jolla, CA 92037 USA
> > 858-546-7121 (work)
> > 858-546-7003 (FAX)
> >
> > Marine Mammal Genetics Group: swfsc.noaa.gov/prd-mmgenetics
> > ETP Cetacean Assessment Program: swfsc.noaa.gov/prd-etp
> >
> > "The universe doesn't care what you believe.
> >  The wonderful thing about science is that it
> >    doesn't ask for your faith, it just asks
> >    for your eyes."  - Randall Munroe
> >
> > "Lighthouses are more helpful than churches."
> >    - Benjamin Franklin
> >
> >    "...but I'll take a GPS over either one."
> >        - John C. "Craig" George
> >
> >         [[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.
> >
> >
> >
> >
> >
> >
> > --
> >
> > Eric Archer, Ph.D.
> > Southwest Fisheries Science Center
> > NMFS, NOAA
> > 8901 La Jolla Shores Drive
> > La Jolla, CA 92037 USA
> > 858-546-7121 (work)
> > 858-546-7003 (FAX)
> >
> > Marine Mammal Genetics Group: swfsc.noaa.gov/prd-mmgenetics
> > ETP Cetacean Assessment Program: swfsc.noaa.gov/prd-etp
> >
> > "The universe doesn't care what you believe.
> >  The wonderful thing about science is that it
> >    doesn't ask for your faith, it just asks
> >    for your eyes."  - Randall Munroe
> >
> > "Lighthouses are more helpful than churches."
> >    - Benjamin Franklin
> >
> >    "...but I'll take a GPS over either one."
> >        - John C. "Craig" George
> >
> >
> 
> 
> --
> 
> Eric Archer, Ph.D.
> Southwest Fisheries Science Center
> NMFS, NOAA
> 8901 La Jolla Shores Drive
> La Jolla, CA 92037 USA
> 858-546-7121 (work)
> 858-546-7003 (FAX)
> 
> Marine Mammal Genetics Group: swfsc.noaa.gov/prd-mmgenetics
> ETP Cetacean Assessment Program: swfsc.noaa.gov/prd-etp
> 
> "The universe doesn't care what you believe.
>  The wonderful thing about science is that it
>    doesn't ask for your faith, it just asks
>    for your eyes."  - Randall Munroe
> 
> "Lighthouses are more helpful than churches."
>    - Benjamin Franklin
> 
>    "...but I'll take a GPS over either one."
>        - John C. "Craig" George
> 
> 	[[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