2011-01-28 70 views
16

一位同事最近正在查看调用图并希望看到什么叫做什么。我们整理与来自mvbutils食物网,但我在想R.如何更好地创建一个装饰(在python说吧)所以我这样做:为R功能编写装饰器

instrument=function(z){ 
    force(z) 
    n=deparse(substitute(z)) # get the name 
    f=function(...){ 
    cat("calling ", n,"\n") 
    x=z(...) 
    cat("done\n") 
    return(x) 
    } 
    return(f) 
} 

这让我做的事:

> foo=function(x,y){x+y} 
> foo(1,2) 
[1] 3 

,现在我可以做的函数日志本身通过包装它:

> foo=instrument(foo) 
> foo(1,2) 
calling foo 
done 
[1] 3 

有这样做过,在一个包说,并有我错过了将打破我这样做的方式任何陷阱?

+1

公平的问题,错误的观众。 IMNSHO你显然需要在`r-devel`上提问。 – 2011-01-28 15:11:00

回答

9

R中的trace函数就是这样做的。见?trace