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

Bill Dunlap bill at insightful.com
Thu Oct 26 19:23:12 CEST 2006


On Wed, 25 Oct 2006, Duncan Murdoch wrote:

> On 10/25/2006 8:14 PM, Gabor Grothendieck wrote:
> > Suppose we have a function such as the following
> >
> > F <- function(f, x) f(x)+1
> >
> > which runs function f and then transforms it.  I would like the
> > corresponding function which works the same except that
> > unlike F returns an invisible result if and only if f does.
>
> I don't think there's a way to do that.  Internally there's a global
> flag called R_Visible; if it is set to zero, the value won't print.  But
>   it gets reset to 1 very easily (e.g. by adding 1 to the result of an
> invisible function), and it's not available in the API for you to write
> C code to look at it.

source(print.eval=TRUE) appears to do this by using an eval.with.vis()
function that calls a .Internal():
    eval.with.vis <- function(expr, envir = parent.frame(),
            enclos = if (is.list(envir) || is.pairlist(envir)) parent.frame() else baseenv())
            .Internal(eval.with.vis(expr, envir, enclos))
Perhaps that could be adapted for more general use.

----------------------------------------------------------------------------
Bill Dunlap
Insightful Corporation
bill at insightful dot com
360-428-8146

 "All statements in this message represent the opinions of the author and do
 not necessarily reflect Insightful Corporation policy or position."




More information about the R-devel mailing list