I have not had the chance to implement this yet, but thanks to you both for
your help. This r-help should be complimented on how helpful it is. Its
really topnotch.
Thanks


On Thu, Apr 4, 2013 at 11:11 PM, Paul Johnson <pauljohn32@gmail.com> wrote:

>
>
>
> On Thu, Apr 4, 2013 at 4:39 AM, Shane Carey <careyshan@gmail.com> wrote:
>
>> Hi William,
>>
>>
>> for (i in one:length(DATA_names))
>>   if ((grepl("_",DATA_names[i]))=="TRUE")
>>     DATA_names[i]<-f(DATA_names[i]))
>>
>> I keep getting an error saying: incompatible types (from symbol to
>> character) in subassignment type fix
>>
>>
> I would urge you not to obliterate DATA_names by writing on top of itself.
> That creates bugs that are really tough to solve.
>
> Remember that a character variable is not the same thing as an expression.
> I mean, an expression is generally a list structure, not interchangeable
> with a character string.  If that f() function is creating expressions, and
> you are trying to obliterate a character vector with expressions, you will
> get errors, as you have seen.
>
> I'm pretty sure that to catch the results of a function that creates
> expressions, your receiver object has to be a list.  My first try would be
>
> myList <- vector("list", length(DATA_names))
>
>
> for (i in one:length(DATA_names))
>   if ((grepl("_", DATA_names[i])) == "TRUE")
>     myList[[i]] <- f(DATA_names[i]))
>
> I copied your code to my system and found I couldn't run it because you
> had one more paren than was needed and the word "one" was undefined. But
> after fixing that, here's evidence my way works:
>
> Note I inserted some spaces in your code, since it is inhumane to smash
> together all those letters around a poor little <- :).
>
>
>
> DATA_names<-c("A_mgkg","B_mgkg","C_mgkg","D_mgkg","E_mgkg","F_mgkg","G_mgkg","H
> mgkg")
>
> f <- function (name)
> {
>   # add other suffices and their corresponding plotmath expressions to the
> list
>   env <- list2env(list(mgkg = bquote(mg ~ kg^{-1}),
>                        ugkg = bquote(mu * g ~ kg^{-1})),
>                   parent = emptyenv())
>   pattern <- paste0("_(", paste(objects(env), collapse="|"), ")")
>   bquoteExpr <- parse(text=gsub(pattern,
>                                 "~(.(\\1))",
>                                 name))[[1]]
> ## I use do.call() to work around the fact that bquote's first argument is
> ## not evaluated.
>   do.call(bquote, list(bquoteExpr, env))
> }
>
> myList <- vector("list", length(DATA_names))
>
> for (i in 1:length(DATA_names))
>   if ((grepl("_", DATA_names[i])) == "TRUE")
>     myList[[i]] <- f(DATA_names[i])
>
>
> myList
>
>
> > myList
> [[1]]
>
> A ~ (mg ~ kg^{
>     -1
> })
>
> [[2]]
>
> B ~ (mg ~ kg^{
>     -1
> })
>
> [[3]]
>
> C ~ (mg ~ kg^{
>     -1
> })
>
> [[4]]
>
> D ~ (mg ~ kg^{
>     -1
> })
>
> [[5]]
>
> E ~ (mg ~ kg^{
>     -1
> })
>
> [[6]]
>
> F ~ (mg ~ kg^{
>     -1
> })
>
> [[7]]
>
> G ~ (mg ~ kg^{
>     -1
> })
>
> [[8]]
> NULL
>
>
> I asked a very similar question here last year and got many interesting
> suggestions. I was so fascinated I wrote a little programming vignette
> called Rchaeology in my package "rockchalk". As soon as you settle on the
> most direct route from start to end, please post, I might learn new tricks.
>
> In your case, I've been wondering if you ought to edit the string before
> it becomes an expression, or whether you should edit the expression after.
> I needed a correct expression to start, though.  This writes the correct
> thing in the middle of the graph. Correct?
>
> xcorrect <- expression(X ~~ "mg kg"^{-1})
> plot(1:10, 1:10, type ="n")
> text(5, 5, xcorrect)
>
> Supposing that's correct, watch this.
>
> mgkg <- quote("mg kg"^{-1})
>
>  text(4, 2, bquote(A ~~ .(mgkg)))
>  text(4, 3, bquote(B ~~ .(mgkg)))
>  text(4, 6, bquote(C ~~ .(mgkg)))
>
> I've got the "units" captured in mgkg, and then when I want to draw that
> into
> and expression, i used bquote. substitute works as well, maybe more clear.
>
> text(3, 8, substitute(B ~~ myUnit, list(myUnit = mgkg)))
>
> In any case, I thought this was a fun question.
>
> pj
>
>
>
>> Have you any ideas on how to get around this, thanks again for your help,
>> much appreciated.
>> Cheers
>>
>>
>> On Wed, Apr 3, 2013 at 5:33 PM, William Dunlap <wdunlap@tibco.com> wrote:
>>
>> > Are you trying to convert a column name like "Na_mgkg" to a plot label
>> > like Na (mg kg^-1) ?
>> > If so you will have to use both string manipulation functions like
>> gsub()
>> > and expression manipulating
>> > functions like bquote().  E.g.,
>> >
>> > f <- function (name)
>> > {
>> >    # add other suffices and their corresponding plotmath expressions to
>> > the list
>> >    env <- list2env(list(mgkg = bquote(mg ~ kg^{-1}),
>> >                         ugkg = bquote(mu * g ~ kg^{-1})),
>> >                    parent = emptyenv())
>> >    pattern <- paste0("_(", paste(objects(env), collapse="|"), ")")
>> >    bquoteExpr <- parse(text=gsub(pattern,
>> >                                  "~(.(\\1))",
>> >                                  name))[[1]]
>> >    # I use do.call() to work around the fact that bquote's first
>> argument
>> > is not evaluated.
>> >    do.call(bquote, list(bquoteExpr, env))
>> > }
>> >
>> > d <- data.frame("Na_mgkg"=1:10, "K_ugkg"=10:1)
>> > plot(Na_mgkg ~ K_ugkg, data=d, xlab=f("K_ugkg"), ylab=f("Na_mgkg"))
>> >
>> > Bill Dunlap
>> > Spotfire, TIBCO Software
>> > wdunlap tibco.com
>> >
>> >
>> > > -----Original Message-----
>> > > From: r-help-bounces@r-project.org [mailto:
>> r-help-bounces@r-project.org]
>> > On Behalf
>> > > Of Shane Carey
>> > > Sent: Wednesday, April 03, 2013 8:02 AM
>> > > To: r-help@r-project.org
>> > > Subject: [R] Superscript
>> > >
>> > > Hi,
>> > > How do I write a superscript within gsub?
>> > >
>> > > I have the following: gsub("_mgkg",expression(paste("mg
>> > kg"^{-1})),names[1])
>> > >
>> > > Thanks
>> > >
>> > >
>> > >
>> > > --
>> > > Shane
>> > >
>> > >       [[alternative HTML version deleted]]
>> > >
>> > > ______________________________________________
>> > > R-help@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.
>> >
>>
>>
>>
>> --
>> Shane
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help@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.
>>
>
>
>
> --
> Paul E. Johnson
> Professor, Political Science      Assoc. Director
> 1541 Lilac Lane, Room 504      Center for Research Methods
> University of Kansas                 University of Kansas
> http://pj.freefaculty.org               http://quant.ku.edu
>



-- 
Shane

	[[alternative HTML version deleted]]

