[R] Using trace

ronggui ronggui.huang at gmail.com
Fri Apr 17 03:26:07 CEST 2009


Can you just print what you need to know? For example:

> fact <- function(x) {
+ if(x<1) ans <- 1 else ans <- x*fact(x-1)
+ print(sys.call())
+ cat(sprintf("X is %i\n",x))
+ print(ans)
+ }
> fact(4)
fact(x - 1)
X is 0
[1] 1
fact(x - 1)
X is 1
[1] 1
fact(x - 1)
X is 2
[1] 2
fact(x - 1)
X is 3
[1] 6
fact(4)
X is 4
[1] 24


2009/4/13 Stavros Macrakis <macrakis at alum.mit.edu>:
> I would like to trace functions, displaying their arguments and return
> value, but I haven't been able to figure out how to do this with the
> 'trace' function.
>
> After some thrashing, I got as far as this:
>
>    fact <- function(x) if(x<1) 1 else x*fact(x-1)
>    tracefnc <- function() dput(as.list(parent.frame()),  #
> parent.frame() holds arg list
>                                                control=NULL)
>    trace("fact",tracer=tracefnc,print=FALSE)
>
> but I couldn't figure out how to access the return value of the
> function in the 'exit' parameter.  The above also doesn't work for
> "..." arguments.  (More subtly, it forces the evaluation of promises
> even if they are otherwise unused -- but that is, I suppose, a weird
> and obscure case.)
>
> Surely someone has solved this already?
>
> What I'm looking for is something very simple, along the lines of
> old-fashioned Lisp trace:
>
>> defun fact (i) (if (< i 1) 1 (* i (fact (+ i -1)))))
> FACT
>> (trace fact)
> (FACT)
>> (fact 3)
>  1> (FACT 3)
>    2> (FACT 2)
>      3> (FACT 1)
>        4> (FACT 0)
>        <4 (FACT 1)
>      <3 (FACT 1)
>    <2 (FACT 2)
>  <1 (FACT 6)
> 6
>
> Can someone help? Thanks,
>
>         -s
>
> ______________________________________________
> 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.
>



-- 
HUANG Ronggui, Wincent
PhD Candidate
Dept of Public and Social Administration
City University of Hong Kong
Home page: http://asrr.r-forge.r-project.org/rghuang.html




More information about the R-help mailing list