On Feb 22, 2010, at 10:25 AM, Marianne Promberger wrote: > Dear list, > > I have two vectors: > > x <- c("one","two") > y <- paste(rep(x,2),"blah") > > I want to replace all occurrences of each element of x in y with > something else, so that y looks like this: > > y > [1] "something else blah" "something else blah" "something else blah" > [4] "something else blah" > > I can do this using a loop: > > for ( i in 1:length(x) ) { > y <- gsub(x[i],"something else",y) > } > > Surely, there must be a less kludgy way? > > I tried looking at the different apply()s but am not getting anywhere, > partly because I lack the mental flexibility to combine the fact that > I am applying gsub() to y but now want to apply that to x ... erm. :/ > > Marianne
You can use "|" to specify a logical "or" in the search regex: > gsub("one|two", "something else", y) [1] "something else blah" "something else blah" "something else blah" [4] "something else blah" Thus: > paste(x, collapse = "|") [1] "one|two" and finally: > gsub(paste(x, collapse = "|"), "something else", y) [1] "something else blah" "something else blah" "something else blah" [4] "something else blah" See ?regex and ?paste HTH, Marc Schwartz ______________________________________________ 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.