On Thu, Nov 19, 2009 at 10:54 AM, Romain Francois < romain.franc...@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.franc...@dbmail.com <mailto:romain.franc...@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@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel