Simon Urbanek wrote:

[snip]

I need to read more about embedding R (as in section 8 of WRE). I know you can supply your own implementation of the REPL, but I am not sure this includes the one that goes on once trapped into the browser.

Yes - it would be quite useless otherwise ;) there are many examples of GUIs that use it (including the built-in ones [Windows, MAc, ..] or external ones e.g JGR).

Cheers,
S

Hi Simon,

Do you mean the rReadConsole callback ? I managed to make some minor modifications to the rtest.java example that comes with JRI to somewhat emulate automatically call some code (ls.str()) in this example at the browser prompt, before giving the prompt to the user.

static boolean browse_first = true ; public String rReadConsole(Rengine re, String prompt, int addToHistory) {
       System.out.print(prompt);
               if( prompt.startsWith( "Browse[") ){
                       if( browse_first ){
System.out.println( "\n>>>> re.eval( \" print( ls.str() )\" ); " ) ;
                           re.eval( "print( ls.str() )" ) ;
                           browse_first = false ;
System.out.println( "\n>>>> return \"ls.str()\"" ) ;
                           return "ls.str()\n" ;
                       } else{
                           browse_first = true ;
                       }
}
...
}

It seems to work and could get me somewhere, although it has a "it works, but it does not feel right" taste. Basically the code pretends the user typed "ls.str\n" at the browse prompt, so that the R evaluator evaluates it, and then comes back to the browse prompt.

There is also the re.eval( "print( ls.str() )" ) part which was my first attempt, but apparently this gets evaluated in the global environment, which is no good. I can get around that by returning some sort of "record the sys.frames and sys.calls somewhere and do something with them" function, but I was wondering if you meant something else.

Romain

Here is the transcript of a simple session of ./run rtest (with the small adjustement above)

> f <- function( x= 5) browser()
rBusy(1)
rBusy(0)
> f()
rBusy(1)
Called from: f()
rBusy(0)
Browse[1]>
>>>> re.eval( " print( ls.str() )" );
a :  chr "hello"
b : 'data.frame':    3 obs. of  2 variables:
$ a: num  1.2 2.3 4.5
$ b: num  1.4 2.6 4.2
bool :  logi [1:3] TRUE FALSE FALSE
f : function (x = 5) iris : 'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

>>>> return "ls.str()"
rBusy(1)
x :  num 5
rBusy(0)
Browse[1]>
rBusy(0)
>



--
Romain Francois
Independent R Consultant
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to