[Rd] how to determine if a function's result is invisible
Marc Schwartz
MSchwartz at mn.rr.com
Thu Oct 26 03:20:32 CEST 2006
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
More information about the R-devel
mailing list