[Rd] [R] step by step debugger in R?
Romain Francois
romain.francois at dbmail.com
Mon May 25 17:39:01 CEST 2009
Simon Urbanek wrote:
>
>
> On May 25, 2009, at 4:54 PM, Romain Francois wrote:
>
>> 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.
Thank you for these comments. It confirms what I was thinking.
>
> Well, it's entirely up to you - the REPL is working. I wasn't
> suggesting you have to use JRI for the debugger, I was just pointing
> out that browsing is treated as a regular prompt on the REPL, so any
> embedding has access to it.
I understand that. It was the quickest way for me to get an example
going. java/JRI is one option, but there are others (Qt, ...)
> The JRI eval() command has nothing to do with this directly - you can
> evaluate in any environment, just not specifying anything will throw
> you in the global environment - it's really up to you (it just
> abstracts out the direct access to parse and eval part of R - you can
> (ab)use it any way you see fit).
... and I surely will.
Romain
>
> Cheers,
> Simon
>
>
>> 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
>>
>>
>>
>
>
>
--
Romain Francois
Independent R Consultant
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
More information about the R-devel
mailing list