[R] How do I step thru all lines (including step into sub-routines) in a R script?

William Dunlap wdunlap at tibco.com
Tue Nov 13 23:45:40 CET 2012


You can make a list of the names of the functions defined at the top
level in a script using the following.

namesOfFunctionsDefined <- function (expr) { # expr is typically output of parse(file)
    expr <- as.list(expr)
    isFunctionAssignment <- function(expr) is.call(expr) && identical(expr[[1]],
        as.name("<-")) && is.call(expr[[3]]) && identical(expr[[3]][[1]],
        as.name("function"))
    asgns <- vapply(expr, isFunctionAssignment, FALSE)
    expr <- expr[asgns]
    vapply(expr, function(e) deparse(e[[2]])[1], "")
}

E.g., for the script /tmp/r.R containing
  f1 <- function(x)x+1
  x <- 10
  x1 <- f1(x)
  f2 <- function(x)x+1
  x2 <- f2(x)
I get:
  > namesOfFunctionsDefined(parse("/tmp/r.R"))
  [1] "f1" "f2"

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Michael
> Sent: Tuesday, November 13, 2012 2:08 PM
> To: Duncan Murdoch
> Cc: r-help
> Subject: Re: [R] How do I step thru all lines (including step into sub-routines) in a R script?
> 
> Is there a way to strip out all functions in hundreds of R script?
> 
> And then I can create a script which does "debug(foo1); debug(foo2);
> debug(foo3);",etc?
> 
> Thank you!
> 
> On Tue, Nov 13, 2012 at 3:56 PM, Duncan Murdoch
> <murdoch.duncan at gmail.com>wrote:
> 
> > On 12-11-13 4:50 PM, Michael wrote:
> >
> >> but there are hundreds of such functions...? how to mark them all using
> >> "debug"?
> >>
> >
> > When you see you are about to enter one that you haven't marked, you can
> > mark it from within the debugger.  (So in some other debuggers you'd type
> > "s" to step in; in R you need to type "debug(foo)" then "n".
> >
> > Duncan Murdoch
> >
> >  thanks!
> >>
> >> On Tue, Nov 13, 2012 at 3:43 PM, Duncan Murdoch
> >> <murdoch.duncan at gmail.com
> <mailto:murdoch.duncan at gmail.**com<murdoch.duncan at gmail.com>>>
> >> wrote:
> >>
> >>     On 12-11-13 4:05 PM, Michael wrote:
> >>
> >>         How do I step thru all lines (including step into sub-routines)
> >>         in a R
> >>         script?
> >>
> >>         Hi all,
> >>
> >>         I know I can put a "browser()" into any place...
> >>
> >>         but how to step into sub-routines?
> >>
> >>         Keep pressing "n" at the break-point seems not getting me into the
> >>         sub-routines?
> >>
> >>
> >>     Mark all your functions for debugging using debug().  It's not like
> >>     a debugger that will single step until you tell it to just continue
> >>     on, but it gives you the individual steps.
> >>
> >>     When you've had enough of that, use undebug() to mark the functions
> >>     for stepping over.
> >>
> >>     Duncan Murdoch
> >>
> >>
> >>
> >
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list