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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel