[Rd] how to determine if a function's result is invisible
Philippe Grosjean
phgrosjean at sciviews.org
Thu Oct 26 16:29:09 CEST 2006
Duncan Murdoch wrote:
[...]
> At the last useR meeting, Thomas Baier made an excellent suggestion:
> someone should put together an API specifically for R GUIs. I think
> eval.with.vis would have to be part of such an API; there are dozens of
> other currently undocumented or unavailable functions as well.
Ah, ha! I am very happy to discover that Thomas Baier had this excellent
idea at the last useR meeting. It is almost four years that I claims for
a R GUI API. If you look at the manual that comes with the SciViews
bundle (available on CRAN), you will notice that there is a manual
called 'SciViews-R, A GUI API and a suite of application for R' (see
http://www.sciviews.org/SciViews-R/Manual.pdf) with about 50 pages that
discuss several aspects related to R GUI APIs.
There are also threads in the R Wiki that discusses a similar topic
(although more related to graphical widgets):
http://wiki.r-project.org/rwiki/doku.php?id=developers:iwidgets&s=api,
http://wiki.r-project.org/rwiki/doku.php?id=developers:gwidgets_api.
This is mainly the work of John Versani, after a discussion between Him,
Simon Urbanek (iWidgets), Michael Lawrence (RGtk2), and myself (SciViews).
That said, I did several attempt to put all people at R-SIG-GUI around a
table to define a common R GUI API,... and I got no significant echo.
So, I personally give up with this topic and look at what others,
perhaps stronger than me in R programming or in communication with other
developers, will do.
But, please, do not give credit for "first idea" to someone else on such
a topic... It is long enough that I fight for better R GUIs (for
instance, http://www.r-project.org/GUI), that this looks offending to me!
Best,
Philippe Grosjean
> This is a difficult project, because it would have to get agreement on
> what should be part of the API, and that will constrain future changes:
> so there would be a lot of resistance to making it too constraining. It
> will need to be flexible, so that R isn't required to supply services
> that don't make sense in all contexts.
>
> Duncan Murdoch
>
>> 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