On Thu, Nov 19, 2009 at 10:54 AM, Romain Francois <
romain.francois@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@dbmail.com <mailto:romain.francois@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]]

