From MSchwartz at mn.rr.com  Thu Oct 26 03:20:32 2006
From: MSchwartz at mn.rr.com (Marc Schwartz)
Date: Wed, 25 Oct 2006 20:20:32 -0500
Subject: [Rd] how to determine if a function's result is invisible
In-Reply-To: <971536df0610251714u451cf80fy80bf38cb2f130734@mail.gmail.com>
References: <971536df0610251714u451cf80fy80bf38cb2f130734@mail.gmail.com>
Message-ID: <1161825632.4556.14.camel@localhost.localdomain>

On Wed, 2006-10-25 at 20:14 -0400, 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.
> 
> Is there some way of determining whether f returns
> an invisible result or not?
> 
> Thus we want this:
> 
> f <- function(x) x
> g <- function(x) invisible(x)
> 
> > F(f, 1)
> 2
> >
> 
> > F(g, 1)
> >

Gabor,

There may be a better way of doing this and/or this will spark some
thoughts.

Let's create two simple functions:

 f.inv <- function(x) {invisible(x)}

 f <- function(x) {x}

So we now have:

> f.inv(1)
> f(1)
[1] 1


> any(grep("invisible", (deparse(f))))
[1] FALSE

> any(grep("invisible", (deparse(f.inv))))
[1] TRUE


This is not extensively tested of course, but another function that
comes to mind that does return a result 'invisibly' is:

> any(grep("invisible", (deparse(barplot.default))))
[1] TRUE

So there seems to be some foundation for working, as long as the target
function can be deparsed, which may limit things with respect to
C/FORTRAN based functions.

HTH,

Marc Schwartz




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