On 12/03/2009 12:17 AM, Michael Lawrence wrote:
On Thu, Nov 19, 2009 at 10:54 AM, Romain Francois <romain.franc...@dbmail.com <mailto: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> <mailto: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.
Thanks for keeping this live. This would work if there was a way to enumerate classes from a java package, which is not always possible because of the flexibility of the java class loader mechanism. You can for example quite easily create a class loader that generates an infinity of classes ...
Romain
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
-- Romain Francois Professional R Enthusiast +33(0) 6 28 91 30 30 http://romainfrancois.blog.free.fr |- http://tr.im/Gq7i : ohloh |- http://tr.im/FtUu : new package : highlight `- http://tr.im/EAD5 : LondonR slides ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel