Dear R-users, Suppose I have an expression: expr = expression(a>0) and now I want to modify it to expression(a>0 & b>0). The following doesn't work: expr = expression(expr & b>0) What would be a good way of doing this? Thanks, Vadim ________________________________ Note: This email is for the confidential use of the named addressee(s) only and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you are hereby notified that any review, dissemination or copying of this email is strictly prohibited, and to please notify the sender immediately and destroy this email and any attachments. Email transmission cannot be guaranteed to be secure or error-free. Jump Trading, therefore, does not make any guarantees as to the completeness or accuracy of this email or any attachments. This email is for informational purposes only and does not constitute a recommendation, offer, request or solicitation of any kind to buy, sell, subscribe, redeem or perform any type of transaction of a financial product. [[alternative HTML version deleted]]
Try this: parse(text = paste(capture.output(expr[[1]]), " & b > 0")) On Fri, Oct 3, 2008 at 12:48 PM, Vadim Organovich <vogranovich at jumptrading.com> wrote:> Dear R-users, > > Suppose I have an expression: > > expr = expression(a>0) > > and now I want to modify it to expression(a>0 & b>0). The following doesn't work: > > expr = expression(expr & b>0) > > What would be a good way of doing this? > > Thanks, > Vadim > > ________________________________ > Note: This email is for the confidential use of the named addressee(s) only and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you are hereby notified that any review, dissemination or copying of this email is strictly prohibited, and to please notify the sender immediately and destroy this email and any attachments. Email transmission cannot be guaranteed to be secure or error-free. Jump Trading, therefore, does not make any guarantees as to the completeness or accuracy of this email or any attachments. This email is for informational purposes only and does not constitute a recommendation, offer, request or solicitation of any kind to buy, sell, subscribe, redeem or perform any type of transaction of a financial product. > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O
On 10/3/2008 11:48 AM, Vadim Organovich wrote:> Dear R-users, > > Suppose I have an expression: > > expr = expression(a>0) > > and now I want to modify it to expression(a>0 & b>0). The following doesn't work: > > expr = expression(expr & b>0) > > What would be a good way of doing this?I'd avoid using parse because it doesn't generalize well. Here's a way to do it without that. But first, some background: expression() returns a special kind of list that contains language objects. So expr[[1]] is initially a>0, and you want to change it to a>0 & b>0. I think you don't really want expr & b>0, because that would be expression(a>0) & b>0 which is nonsense. The bquote() function is probably the easiest way to make substitutions. The idea is that you write out the answer you want within bquote(), using .() around things you want substituted. (You can also use the substitute() function, but it's a little trickier.) Putting these together, this gives you the final result you want: expr <- expression(a>0) expr[[1]] <- bquote( .(expr[[1]]) & b>0 ) The following lines almost give you what you want: expr2 <- expression(a>0) expr2 <- bquote( expression( .(expr2[[1]]) & b>0 ) ) but not quite: expr2 becomes an unevaluated call to the expression() function, not an actual expression (though they print the same). You need this for the equivalent to the first version: expr2 <- expression(a>0) expr2 <- eval( bquote( expression( .(expr2[[1]]) & b>0 ) ) ) Duncan Murdoch