On Wed, May 8, 2013 at 5:08 AM, Thaler,Thorn,LAUSANNE,Applied Mathematics <thorn.tha...@rdls.nestle.com> wrote: > Dear all, > > I want to use gsub to change a vector of strings. Basically, I want to > replace any dot by a space, remove the possibly appended ".f" and I want to > capitalize each word. I did that by chaining multiple gsubs together, but I > was wondering (for the sake of learning - maybe the current version is more > readable) whether I could do that with a _single_ gsub call? > > Thanks for your help! > > txt <- c("example1", "example2.f", "another.example3.f", > "yet.another.example4.f") > gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", > gsub("\\.", " ", gsub("\\.f", "", txt)), > perl = TRUE) >
gsubfn() in the gsubfn package is like gsub except that the replacement string can be a user function, list or proto object. Using a function one call to gsubfn could do it: Note that the user function's i-th argument captures the i-th back reference and the function's output is used to replace its input so: library(gsubfn) f <- function(x1, x2, x3) { if (x1 != "") return("") if (x2 != "") return(" ") if (x3 != "") return(toupper(x3)) } gsubfn("(.f$)|(\\.)|(\\b.)", f, txt, perl = TRUE) The last line gives: [1] "Example1" "Example2" "Another Example3" "Yet Another Example4" See http://gsubfn.googlecode.com -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ 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.