Try this. If the first arg of FUN is x then it increments it. incrx <- function (e) { is.node <- function(x) is.symbol(x) || is.double(x) if (is.node(e)) return(e) if (is.name(e[[1]]) && e[[1]] == as.name("FUN") && names(e)[2] == "x") e[[2]] <- e[[2]] + 1 for (i in 1:length(e)) e[[i]] <- incrx(e[[i]]) return(e) }
incrx(expression(FUN(x = 0) + log(FUN(x = 3)))) On 10/22/06, McGehee, Robert <[EMAIL PROTECTED]> wrote: > R-Developers, > I'm looking for some help computing on the R language. > > I'm hoping to write a function that parses a language or expression > object and returns another expression with all instances of certain > argument of a given function altered. For instance, say I would like my > function, myFun to take an expression and whenever the argument 'x' > appears within the function FUN inside that expression, return an > altered expression in which 'x' is incremented by one. > > Thus, > > x <- expression(FUN(x = 0) + log(FUN(x = 3))) > > myFun(x) > [1] expression(FUN(x = 1) + log(FUN(x = 4))) > > Conceptually, it looks like I want to recursively break a language > object into its component functions, search for FUN and increment one of > its arguments ('x'), then reassemble and return the resulting > expression. However, I haven't been able to come up with a clean way to > do this. Suggestions would be greatly appreciated. > > Thanks in advance, > Robert > > Robert McGehee > Quantitative Analyst > Geode Capital Management, LLC > 53 State Street, 5th Floor | Boston, MA | 02109 > Tel: 617/392-8396 Fax:617/476-6389 > mailto:[EMAIL PROTECTED] > > > > This e-mail, and any attachments hereto, are intended for us...{{dropped}} > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel