[Rd] Changing function arguments

Gabor Grothendieck ggrothendieck at gmail.com
Mon Oct 23 07:13:26 CEST 2006


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 <Robert.McGehee at geodecapital.com> 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:robert.mcgehee at geodecapital.com
>
>
>
> This e-mail, and any attachments hereto, are intended for us...{{dropped}}
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>




More information about the R-devel mailing list