[R] using a condition given as string in subset function - how?

Thomas Lumley tlumley at u.washington.edu
Sun Mar 21 21:30:16 CET 2010


On Sun, 21 Mar 2010, Albert-Jan Roskam wrote:

> 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..

parse() turns a character string into R code, and eval() evaluates R code.

parse() usually requires eval(), because there's rarely much point parsing a string if you aren't going to evaluate it, but eval() usually doesn't require parse().  That is, most uses of eval() are not on strings but on expressions.

In your case it is not clear whether someone else hands you a condition in string form, in which care parse() is necessary, or whether you build it up your self, in which case parse() is not necessary, and eval() may not be necessary.

         -thomas


> Cheers!!
>
> Albert-Jan
>
>
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> In the face of ambiguity, refuse the temptation to guess.
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> --- On Sun, 3/21/10, jim holtman <jholtman at gmail.com> wrote:
>
> From: jim holtman <jholtman at gmail.com>
> Subject: Re: [R] using a condition given as string in subset function - how?
> To: "Mark Heckmann" <mark.heckmann at gmx.de>
> Cc: r-help at 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.heckmann at 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 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<http://www.r-project.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 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.
>
>
>
>
> 	[[alternative HTML version deleted]]
>
>

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle



More information about the R-help mailing list