2011-01-28 2 views
16

Недавно коллега смотрел на графики вызовов и хотел посмотреть, что называется. Мы отсортировали, что с пищевой цепи от mvbutils, но мне было интересно, о том, как лучше создать декоратор (в питона говорят) в R. Таким образом, я сделал это:Написание декоратора для функций 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'. –

+3

Пока Габор находится в аудитории, его правильная аудитория. – Spacedman

+2

Большой вопрос. Хотя ответ был принят, я хотел бы увидеть более канонический/энциклопедический один :) – fmark

ответ

9

trace функция в R делает. См. ?trace.

Смежные вопросы