[R] Search and convert string function
Brahm, David
David.Brahm at geodecapital.com
Mon Mar 7 21:25:47 CET 2005
peng shen [mailto:michael_shen at hotmail.com] wrote:
> R <- 4
> testString <- "I love $R"
> So the final string I want to get is "I love 4". How can I implement?
I've written an interpolater function "g.p" with these additional
features:
- Loops through all occurences of the escape character ($) rather than
all
external variables.
- Variable names are terminated by any non-alphanumeric char or a
"silent" $$.
- Variables may come from the parent environment or from named
arguments.
- Pastes together its unnamed arguments with sep="", useful for long
strings.
Example:
R> R <- 4
R> testString <- "I love $R"
R> g.p(testString)
[1] "I love 4"
Fancier example:
R> var1 <- 7
R> var2 <- 5
R> g.p("Add $var1 to $var2 to calc",
"ulate $var3",
var3=var1+var2)
[1] "Add 7 to 5 to calculate 12"
Function definition:
g.p <- function(..., esc="\\$", sep="", collapse=" ", parent=1) {
a <- lapply(list(...), as.character)
n <- names(a); if (is.null(n)) n <- rep("", length(a))
s <- do.call("paste", c(a[n==""], sep=sep, collapse=collapse))
for (i in which(n != "")) s <- gsub(paste(esc,n[i],sep=""), a[[i]], s)
while ((r <- regexpr(paste(esc,"\\w*",sep=""), s)) > 0) {
v <- substring(s, r+1, r+attr(r,"match.length")-1)
s <- if (v=="") paste(substring(s,1,r-1), substring(s,r+2), sep="")
else
gsub(paste(esc,v,sep=""),
as.character(eval.parent(parse(text=v), parent)), s)
}
s
}
-- David Brahm (brahm at alum.mit.edu)
More information about the R-help
mailing list