> -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Albert-Jan Roskam > Sent: Sunday, March 21, 2010 2:25 AM > To: Mark Heckmann; jim holtman > Cc: r-help@r-project.org > Subject: Re: [R] using a condition given as string in subset > function - how? > > Hi, > > Is eval always used in conjunction with parse? Based on other > languages, I'd expect the expression already to work without > the use of parse(), but indeed it doesn't, or at least not as > intended. Just a newbie question..
When eval is given a parse tree (e.g., the output of parse() or call()) it recursively ascends the tree, effectively calling eval() on the subtrees. E.g., parse(text='paste("No", 1)')[[1]] returns a "call" object of length 3, the elements being the name object `paste`, the character object "No", and the numeric object 1. Evaluating a name object returns its value and evaluating a character or numeric object returns the object (unchanged). I.e., in this case eval(`paste`) -> function(..., sep=" ", collapse=NULL) eval("No") -> "No" eval(1) -> 1 The root of the parse tree is the call object and evaluating that means applying the function given by the first argument to the rest of the argumeents. If eval("No") meant the same as eval(parse(text="No")) then this scheme would break down, since you wouldn't be able to distinguish between character objects and name objects, so it would not be possible to say you wanted the string "No" or the value of the object called "No". You might say that eval("String") should do one thing when called directly, whatever that means, and another when called by a recursive call to eval(), but I think functions should act the same no matter who calls them. There are also times when you want the raw parse tree, as when processing model formulae like log(response)~groupId/predictor or trellis/lattice formulae like log(y)~predictor|groupId. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > > Cheers!! > > Albert-Jan > > > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > In the face of ambiguity, refuse the temptation to guess. > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > --- On Sun, 3/21/10, jim holtman <jholt...@gmail.com> wrote: > > From: jim holtman <jholt...@gmail.com> > Subject: Re: [R] using a condition given as string in subset > function - how? > To: "Mark Heckmann" <mark.heckm...@gmx.de> > Cc: r-help@r-project.org > Date: Sunday, March 21, 2010, 2:33 AM > > I know that if you have to resort to 'parse(text=...)', you > should look for > another way (it is a 'fortune'), but it is getting late, and > at least it > works: > > > eval(parse(text="subset(df, A==1 & B==1)")) >  A B > 1 1 1 > > > On Sat, Mar 20, 2010 at 9:09 PM, Mark Heckmann > <mark.heckm...@gmx.de> wrote: > > > df <- data.frame(A=c(1,2), B=c(1,1)) > > > > I have a string containing a condition for a subset function, like: > > conditionAsString <- paste(names(df), df[1,], sep="==", > collapse=" & ") > > > conditionAsString > > > "A==1 & B==1" > > > > Now I want to use this string in the subset call, like > > > > subset(df, conditionAsString) > > > > I do not exactly now how to combine substitute, expression, > parse and > > so on to get what I want, which would be: > > > > subset(df, A==1 & B==1) > > > > but using the string conditionAsString. > > > > Thanks, > > Mark > > > ––––––––––––––––––––†“–––––––––––––––––– > > Mark Heckmann > > Blog: www.markheckmann.de > > R-Blog: http://ryouready.wordpress.com > > > > > > > > > > > >    [[alternative HTML version deleted]] > > > > > > ______________________________________________ > > 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<http://www.r-proje ct.org/posting-guide.html> > > and provide commented, minimal, self-contained, reproducible code. > > > > > > > -- > Jim Holtman > Cincinnati, OH > +1 513 646 9390 > > What is the problem that you are trying to solve? > >    [[alternative HTML version deleted]] > > > -----Inline Attachment Follows----- > > ______________________________________________ > 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. > > > > > [[alternative HTML version deleted]] > > ______________________________________________ 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.