From romain.francois at dbmail.com  Thu Nov 19 19:54:28 2009
From: romain.francois at dbmail.com (Romain Francois)
Date: Thu, 19 Nov 2009 19:54:28 +0100
Subject: [Rd] combine UserDefinedDatabase and regular environments
In-Reply-To: <509e0620911190914g3cd6838eyd91b049680d737e7@mail.gmail.com>
References: <4AF31246.1060004@dbmail.com>
	<509e0620911190914g3cd6838eyd91b049680d737e7@mail.gmail.com>
Message-ID: <4B059464.2020003@dbmail.com>

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.


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



[Rd] combine UserDefinedDatabase and regular environments
Romain Francois