Re: [Rd] combine UserDefinedDatabase and regular environments

From: Michael Lawrence <lawremi_at_gmail.com>
Date: Wed, 02 Dec 2009 15:17:12 -0800

On Thu, Nov 19, 2009 at 10:54 AM, Romain Francois < romain.francois_at_dbmail.com> wrote:

> On 11/19/2009 06:14 PM, Michael Lawrence wrote:
>
>>
>>
>> On Thu, Nov 5, 2009 at 9:58 AM, Romain Francois
>> <romain.francois_at_dbmail.com <mailto:romain.francois_at_dbmail.com>> wrote:
>>
>> Hello,
>>
>> Is it possible to have the effect of UserDefinedDatabase outside of
>> "attached" environments ? Can I disguise an environment of the
>> sys.frames() as a UserDefinedDatabase ?
>>
>> This seems to suggest that it might be possible :
>>
>> > f <- function(){ e <- environment(); class(e) <-
>> "UserDefinedDatabase"; ff }
>> > f()
>>
>>
>> The UserDefinedDatabase support expects an R_ObjectTable C structure
>> embedded within an externalptr as the HASHTAB of the environment. So
>> it's really only possible from C.
>>
>
> Sure. Too bad both environments and user defined database use HASHTAB with
> completely different meanings.
>
> What I would want is something like this:
>
> f <- function(){
> attachLocally( getSomeUserDefinedDatabaseFromC() )
> HELLO
> }
>
> and the variable associated with the binding "HELLO" would come dynamically
> from the user defined database.
>
>
> A more concrete example : rJava now has javaImport, that combined with
> attach allows dynamic lookup for class names within a set of imported java
> package paths:
>
> attach( javaImport( "java.util" ), name = "java:java.util" )
> v <- new( Vector )
> m <- new( HashMap )
>
> This is nice, but then as usual with attach, you forget to detach, ... this
> question is about to find a way to have this instead:
>
> f <- function(){
> import( "java.util" )
> v <- new( Vector )
> v$add( 1 )
> v
> }
>
> where the "java.util" is no more looked up when f returns.
>
>
>
Probably no clean way to accomplish that. But you could always use with() if you can get that Java package as an environment. Or use environment<-() to enclose your function in it. That's actually fairly Java-like, as normally the import has file scope and your classes are enclosed within that file.

Michael

> *** caught segfault ***
>> address (nil), cause 'unknown'
>>
>> Traceback:
>> 1: f()
>>
>> Possible actions:
>> 1: abort (with core dump, if enabled)
>> 2: normal R exit
>> 3: exit R without saving workspace
>> 4: exit R saving workspace
>>
>>
>> At the moment, it seems to be either lookup using
>> UserDefinedDatabase or regular lookup. Has anyone tried to combine
>> both ?
>>
>
> --
> Romain Francois
> Professional R Enthusiast
> +33(0) 6 28 91 30 30
> http://romainfrancois.blog.free.fr
> |- http://tr.im/EAD5 : LondonR slides
>
> |- http://tr.im/BcPw : celebrating R commit #50000
> `- http://tr.im/ztCu : RGG #158:161: examples of package IDPmisc
>
>

        [[alternative HTML version deleted]]



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 02 Dec 2009 - 23:20:56 GMT

This archive was generated by hypermail 2.2.0 : Thu 03 Dec 2009 - 10:50:59 GMT