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 You didn't say what the DATA_names vector contains. Let's say it is DATA <- data.frame(K_mgkg=sqrt(1:10), Zn_ugkg=log(1:10), Date=1:10) DATA_names <- colnames(DATA) Note that f() takes a single character string and returns a single expression (language object) and you are not allowed to stick expressions into vectors of character strings. Make a new dataset containing the expressions to use for labels. Try DATA_expressions <- as.expression(lapply(DATA_names, f)) names(DATA_expressions) <- DATA_names boxplot(DATA, names=DATA_expressions) plot(K_mgkg ~ Date, data=DATA, xlab=DATA_expressions[["Date"]], ylab=DATA_expressions[["K_mgkg"]]) Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com From: Shane Carey [mailto:careys...@gmail.com] Sent: Thursday, April 04, 2013 2:40 AM To: William Dunlap Cc: r-help@r-project.org Subject: Re: [R] Superscript Hi William, Im trying to run this function within a for loop as follows: 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)<file:///\\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)) } 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 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 <wdun...@tibco.com<mailto:wdun...@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)<file:///\\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<http://tibco.com> > -----Original Message----- > From: r-help-boun...@r-project.org<mailto:r-help-boun...@r-project.org> > [mailto:r-help-boun...@r-project.org<mailto:r-help-boun...@r-project.org>] On > Behalf > Of Shane Carey > Sent: Wednesday, April 03, 2013 8:02 AM > To: r-help@r-project.org<mailto: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<mailto: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.