[Rd] how to determine if a function's result is invisible

Gabor Grothendieck ggrothendieck at gmail.com
Sun Oct 29 14:28:08 CET 2006


On 10/29/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 10/29/2006 8:03 AM, Gabor Grothendieck wrote:
> > On 10/28/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> >> On 10/28/2006 6:03 PM, Philippe Grosjean wrote:
> >>> Duncan Murdoch wrote:
> >>> [...]
> >>>> I've just added this function to R-devel (to become 2.5.0 next spring):
> >>>>
> >>>> withVisible <- function(x) {
> >>>>      x <- substitute(x)
> >>>>      v <- .Internal(eval.with.vis(x, parent.frame(), baseenv()))
> >>>>      v
> >>>> }
> >>>>
> >>>> Luke Tierney suggested simplifying the interface (no need to duplicate
> >>>> the 3 parameter eval interface, you can just wrap this in evalq() if you
> >>>> need that flexibility); the name "with.vis" was suggested, but it looks
> >>>> like an S3 method for the with() generic, so I renamed it.
> >>>>
> >>>> Duncan Murdoch
> >>> Excellent, many thanks... but I am afraid I cannot use this function
> >>> because you force evaluation on parent.frame(), where I need to evaluate
> >>> it in .GlobalEnv (which is NOT equal to parent.frame() in my context).
> >>> Would it be possible to change it to:
> >>>
> >>> withVisible <- function(x, env = parent.frame()) {
> >>>      x <- substitute(x)
> >>>      v <- .Internal(eval.with.vis(x, env, baseenv()))
> >>>      v
> >>> }
> >>>
> >>> ...so that we got additional flexibility?
> >> As I said, that's not needed.  Use evalq(withVisible(x), envir=.GlobalEnv).
> >
> > Even if its not strictly necessary in terms of minimality it still might be
> > convenient and consistent with other eval-style functions which do tend
> > to provide an env= or in the case of lm-style functions a data= argument.
> > Also its very easy to do and the underlying internal function supports it.
>
> I agree with Luke here.  It's a bad design to make every function do
> everything.  This function reveals the "R_visible" flag.  It doesn't
> need to do anything else.
>
> Duncan Murdoch
>

But I think that consistency with the rest of R is more important here.
R is hardly minimal -- its a grab bag of a huge amount of functionality
thrown in by numerous people working in parallel so I don't think that
minimality is the right principle here.

If one did not know the calling sequence I think a reasonable guess
would be that there would be such an env= argument so the principle of least
surprise suggests that it be there.




More information about the R-devel mailing list