From phgrosjean at sciviews.org  Thu Oct 26 16:29:09 2006
From: phgrosjean at sciviews.org (Philippe Grosjean)
Date: Thu, 26 Oct 2006 16:29:09 +0200
Subject: [Rd] how to determine if a function's result is invisible
In-Reply-To: <45409176.5040105@stats.uwo.ca>
References: <971536df0610251714u451cf80fy80bf38cb2f130734@mail.gmail.com>	<454023EA.4020403@stats.uwo.ca>	<971536df0610252002s46ef72b2n32df3e180a49e990@mail.gmail.com>	<45403561.1000808@stats.uwo.ca>
	<971536df0610260226o55726354j8cbdfa5af07ae508@mail.gmail.com>
	<45408DDB.6060308@sciviews.org> <45409176.5040105@stats.uwo.ca>
Message-ID: <4540C635.1010604@sciviews.org>



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
>>>>
>>>>
> 
> 
>




[Rd] how to determine if a function's result is invisible
Philippe Grosjean