From rgentlem at fhcrc.org  Wed Oct 18 18:24:25 2006
From: rgentlem at fhcrc.org (Robert Gentleman)
Date: Wed, 18 Oct 2006 09:24:25 -0700
Subject: [Rd] Error condition in evaluating a promise
In-Reply-To: <5EB2115D-9911-4268-85FA-9AB03F0D9009@r-project.org>
References: <0359A469-1F7D-4CEF-A408-CCB185D5F90E@r-project.org>	<6phvemixy1u.fsf@gopher4.fhcrc.org>	<6phvemiuw3r.fsf@gopher4.fhcrc.org>	<9AE19AAE-9CAD-4697-82DC-07724445114C@r-project.org>	<m2d58psl5d.fsf@ziti.local>
	<5EB2115D-9911-4268-85FA-9AB03F0D9009@r-project.org>
Message-ID: <45365539.9050106@fhcrc.org>



Simon Urbanek wrote:
> Seth,
> 
> thanks for the suggestions.
> 
> On Oct 18, 2006, at 11:23 AM, Seth Falcon wrote:
> 
>> Simon Urbanek <simon.urbanek at r-project.org> writes:
>>> thanks, but this is not what I want (the symbols in the environment
>>> are invisible outside) and it has nothing to do with the question I
>>> posed: as I was saying in the previous e-mail the point is to have
>>> exported variables in a namespace, but their value is known only
>>> after the namespace was attached (to be precise I'm talking about
>>> rJava here and many variables are valid only after the VM was
>>> initialized - using them before is an error).
>> We have a similar use case and here is one workaround:
>>
>> Define an environment in your name space and use it to store the
>> information that you get after VM-init.
>>
>> There are a number of ways to expose this:
>>
>> * Export the env and use vmEnv$foo
>>
>> * Provide accessor functions, getVmFooInfo()
>>
>> * Or you can take the accessor function approach a bit further to make
>>   things look like a regular variable by using active bindings.  I can
>>   give more details if you want.  We are using this in the BSgenome
>>   package in BioC.
>>
> 
> I'm aware of all three solutions and I've tested all three of them  
> (there is in fact a fourth one I'm actually using, but I won't go  
> into detail on that one ;)). Active bindings are the closest you can  
> get, but then the value is retrieved each time which I would like to  
> avoid.
> 
> The solution with promises is very elegant, because it guarantees  
> that on success the final value will be locked. It also makes sense  
> semantically, because the value is determined by code bound to the  
> variable and premature evaluation is an error - just perfect.
> 
> Probably I should have been more clear in my original e-mail - the  
> question was not to find a work-around, I have plenty of them ;), the  
> question was whether the behavior of promises under error conditions  
> is desirable or not (see subject ;)). For the internal use of  
> promises it is irrelevant, because promises as function arguments are  
> discarded when an error condition arises. However, if used in the  
> "wild", the behavior as described would be IMHO more useful.
> 

   Promises were never intended for use at the user level, and I don't 
think that they can easily be made useful at that level without exposing 
a lot of stuff that cannot easily be explained/made bullet proof.  As 
Brian said, you have not told us what you want, and I am pretty sure 
that there are good solutions available at the R level for most problems.

   Although the discussion has not really started, things like dispatch 
in the S4 system are likely to make lazy evaluation a thing of the past 
since it is pretty hard to dispatch on class without knowing what the 
class is. That means, that as we move to more S4 methods/dispatch we 
will be doing more evaluation of arguments.

    best wishes
      Robert


> Cheers,
> Simon
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

-- 
Robert Gentleman, PhD
Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M2-B876
PO Box 19024
Seattle, Washington 98109-1024
206-667-7700
rgentlem at fhcrc.org




[Rd] Error condition in evaluating a promise
Robert Gentleman