Thanks, but I think there is a small mistake in your code: > expr <- expression(a+b+c) > do.call("substitute", list(expr, list(a=1))) expression(a + b + c)
I think it should be: > as.expression(do.call("substitute", list(expr[[1]], list(a=1)))) expression(1 + b + c) - or maybe it can be done in a simpler way? Regards Søren -----Oprindelig meddelelse----- Fra: Gabor Grothendieck [mailto:ggrothendi...@gmail.com] Sendt: 26. november 2010 14:39 Til: Søren Højsgaard Cc: r-h...@stat.math.ethz.ch Emne: Re: [R] Calling substitute(expr, list(a=1)) when expr <- expression(a+b+c) On Fri, Nov 26, 2010 at 8:31 AM, Søren Højsgaard <soren.hojsga...@agrsci.dk> wrote: > # The result I am after is the result after a substitution in an expression, > such as > > substitute(expression(a+b+c), list(a=1)) > expression(1 + b + c) > # However, the way I want to do it is for a an expression "stored as a > variable" as > > (expr <- expression(a+b+c)) > expression(a + b + c) > # a) The following does not work > > (expr2 <- substitute(expr, list(a=1))) > expr > # b) - whereas this does work: > > ans <- eval(substitute(substitute(qqq, list(a=1)), list(qqq=expr[[1]]))) > as.expression(ans) > expression(1 + b + c) > # I have - at least - two problems: > # I am not sure I understand 1) why a) does not work and 2) why b) does work. > # Can anyone point me in the right direction? > It does not evaluate its argument so if expr is the first argument about the only thing you can substitute is expr itself: > substitute(expr, list(expr = 3)) [1] 3 Try this: > expr <- expression(a+b+c) > do.call("substitute", list(expr, list(a=1))) expression(a + b + c) -- 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.