2011-01-28 26 views
16

Un collega di recente stava esaminando i grafici delle chiamate e voleva vedere cosa chiamava cosa. Abbiamo risolto che con Foodweb da mvbutils, ma mi chiedevo sul modo migliore per creare un decoratore (in python parlare) in R. Quindi ho fatto questo:Scrivere un decoratore per le funzioni 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) 
} 

Questo mi permette di fare:

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

e ora posso farsi registrare la funzione avvolgendolo:

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

ciò è stato fatto prima, in un pacchetto dire, e ho perso dei trucchi che si romperà il mio modo di fare questo?

+1

Domanda giusta, pubblico sbagliato. IMNSHO devi chiaramente chiedere questo su 'r-devel'. –

+3

Fintanto che Gabor è nel pubblico, è il pubblico giusto. – Spacedman

+2

Ottima domanda. Sebbene la risposta sia stata accettata, mi piacerebbe vederne una più canonica/enciclopedica :) – fmark

risposta

9

La funzione trace in R lo fa. Vedi ?trace.

Problemi correlati