[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

 "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