[Rd] how to determine if a function's result is invisible
Philippe Grosjean
phgrosjean at sciviews.org
Thu Oct 26 12:28:43 CEST 2006
> On 10/26/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
[...]
>> Actually, there is a way, but it's undocumented (i.e., use at your own
>> risk). It's the eval.with.vis function. This is an internal function
Yes... and there are three problems here:
1) To spot the undocumented function one is looking for,
2) To figure out how to use it,
3) To rewrite your code regularly if you maintain packages that use
several of such undocumented functions. This is the case of many R GUI
projects... and one reason why staying up-to-date with the new versions
of R (every 6 months) is a nightmare for these GUIs!
For instance, I use eval.with.vis() in the latest version of svSockets
package in the SciViews bundle, but I am afraid to release it on CRAN
because I know of the nightware I will face if this function (silently)
changes its behavior in subsequent versions of R.
I guess there is no solution to this problem, since there is certainly a
good reason for keeping portions of R code undocumented (and thus
flagged as :" use-it-at-your-own-risk!"), but it does not eases our life!
Best,
Philippe Grosjean
>> that is used within source() and capture.output(); you'll have to guess
>> from the usage there what the args are. But here's an F that does
>> something close to what you want:
>>
>> > fix(F)
>> > f <- function() 1
>> > g <- function() invisible(1)
>> >
>> > F <- function (expr)
>> + {
>> + expr <- substitute(expr)
>> + pf <- parent.frame()
>> + tmp <- .Internal(eval.with.vis(expr, pf,
>> + baseenv()))
>> + tmp
>> + }
>> > F(f())
>> $value
>> [1] 1
>>
>> $visible
>> [1] TRUE
>>
>> > F(g())
>> $value
>> [1] 1
>>
>> $visible
>> [1] FALSE
>>
>>
More information about the R-devel
mailing list