On Sep 9, 2014, at 4:07 PM, peter dalgaard wrote:


On 07 Sep 2014, at 00:31 , David Winsemius <dwinsem...@comcast.net> wrote:

The goal:
to create a function modeled after `subset` (notorious for its non- standard evaluation) that will take a series of logical tests as unquoted expressions to be evaluated in the framework of a dataframe environment and return a dataframe of logicals:
...

A belated peep from the author of subset(): Don't!

I think we learned the hard way by now that it is much easier to pass unevaluated expressions in the shape of formula objects or maybe expression objects. Lots of pain can be avoided by slipping in a simple "~".

It's taken me several years to understand why you are probably correct in this regard. I needed to learn that `~` is actually a function that creates a language object.

> is.function(`~`)
[1] TRUE
> is.language( ~ x > 5 & x < 10)
[1] TRUE

... and that it's rather easy to extract the object somewhat like but not really an expression embedded in such an object:

> is.expression( ~ x > 5 & x < 10)
[1] FALSE

> is.call( (~ x > 5 & x < 10)[2] )
[1] TRUE

The task of learning the various types of language objects is not an easy one.

--

David Winsemius, MD
Alameda, CA, USA

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

Reply via email to