The solution in my post has the advantage of not using eval or character conversions (except in setting up L where you want such character conversions to build up the names, as your more general sitution shows). The following is the same as in that post except the line setting L in that post is replaced with the 2 lines setting i, j and L. Setting L in this way would also work in conjunction with some of the other solutions too:
e <- expression(u1 + u2 + u3) i <- 1; j <- 2; L <- list() L[[paste("u", i, sep = "")]] <- as.name(paste("u", j, sep = "")) as.expression(do.call(substitute, list(as.call(e), L))[[1]]) One can streamline it further by making it a function and using assign: subu <- function(e, i, j) { assign(paste("u", i, sep = ""), as.name(paste("u", j, sep = ""))) as.expression(do.call(substitute, list(as.call(e)))[[1]]) } e <- expression(u1 + u2 + u3) subu(e, 1, 2) On 3/28/07, Daniel Berg <[EMAIL PROTECTED]> wrote: > Thank you very much for your good suggestions. > I have chosen to pursue the suggestion by Peter which worked like a dream :) > However, my problem is slightly more complicated still. I apologize > for not mentioning this in the initial question. > > I have to do the evaluation inside a loop, not knowing explicitly > which 'u' to replace. This is given by the loop I'm in, say something > like: > > i <- 2; j <- 3 > eval(substitute(substitute(call,list(paste("u",i,sep="")=quote(x),paste("u",j,sep="")=1)),list(call=e[[1]]))) > > But this returns a syntax error. > Any further suggestions? > > Regards, > Daniel > > On 3/27/07, Thomas Lumley <[EMAIL PROTECTED]> wrote: > > On Tue, 27 Mar 2007, Peter Dalgaard wrote: > > > > >The way around this is to add a further layer of substitute() to insert > > >the value of e: > > > > >> eval(substitute(substitute(call,list(u2=quote(x),u3=1)),list(call=e[[1]]))) > > > u1 + x + 1 > > > > Or eval(do.call(substitute, list(e[[1]], list(u2=quote(x),u3=1))) > > > > -thomas > > > > > > > -- > danielberg.no > > ______________________________________________ > R-help@stat.math.ethz.ch 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. > ______________________________________________ R-help@stat.math.ethz.ch 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.