An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20130706/c04e5018/attachment.pl>
Transferring commas in character vector to expression
3 messages · Eric Archer, William Dunlap
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.
7 days later
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20130715/158409af/attachment.pl>