[Rd] how to determine if a function's result is invisible
Duncan Murdoch
murdoch at stats.uwo.ca
Sun Oct 29 14:22:43 CET 2006
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
More information about the R-devel
mailing list