[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