I have a variable of mode "call":> b = quote(b==3) > bb == 3 Now I want to append "&& x > 2" to the value of b. How do I do that?
Jack Tanner <ihok <at> hotmail.com> writes:> > b = quote(b==3) > > Now I want to append "&& x > 2" to the value of b. How do I do that?Never mind, I figured it out: substitute(b && x > 2, list(b=b))
> -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Jack Tanner > Sent: Sunday, March 27, 2011 9:14 PM > To: r-help at stat.math.ethz.ch > Subject: Re: [R] altering a "call" variable from quote() > > Jack Tanner <ihok <at> hotmail.com> writes: > > > > b = quote(b==3) > > > > Now I want to append "&& x > 2" to the value of b. How do I do that? > > Never mind, I figured it out: > > substitute(b && x > 2, list(b=b))You can also use call() or as.call(): > e1 <- substitute(b && x > 2, list(b=b)) > e2 <- call("&&", b, quote(x>2)) > e3 <- as.call(list(quote(`&&`), b, quote(x>2))) > identical(e1,e2) && identical(e1,e3) [1] TRUE substitute can be a pain when the first argument is not a literal expression. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> > ______________________________________________ > R-help at 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. >
On Mar 28, 2011, at 11:32 AM, William Dunlap wrote:>> -----Original Message----- >> From: r-help-bounces at r-project.org >> [mailto:r-help-bounces at r-project.org] On Behalf Of Jack Tanner >> Sent: Sunday, March 27, 2011 9:14 PM >> To: r-help at stat.math.ethz.ch >> Subject: Re: [R] altering a "call" variable from quote() >> >> Jack Tanner <ihok <at> hotmail.com> writes: >> >>>> b = quote(b==3) >>> >>> Now I want to append "&& x > 2" to the value of b. How do I do that? >> >> Never mind, I figured it out: >> >> substitute(b && x > 2, list(b=b)) > > You can also use call() or as.call(): >> e1 <- substitute(b && x > 2, list(b=b)) >> e2 <- call("&&", b, quote(x>2)) >> e3 <- as.call(list(quote(`&&`), b, quote(x>2))) >> identical(e1,e2) && identical(e1,e3) > [1] TRUE > substitute can be a pain when the first argument is not > a literal expression.Or `bquote`: b = quote(b==3) bquote(.(b) && x > 2) # b == 3 && x > 2 > identical(e1,e2) && + identical(e1,e3) && + identical(e1, bquote(.(b) && x > 2) ) [1] TRUE> > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.comDavid Winsemius, MD West Hartford, CT