Vraag Een decorateur schrijven voor R-functies


Een collega keek onlangs naar gespreksgrafieken en wilde zien wat wat genoemd werd. We hebben dat gesorteerd met foodweb van mvbutils, maar ik vroeg me af hoe je het beste een decorateur kunt maken (in Python) in R. Dus deed ik dit:

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)
}

Dit laat me doen:

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

en nu kan ik de functie zelf laten loggen door deze in te pakken:

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

is dit al eens eerder gedaan, in een pakket bijvoorbeeld, en heb ik alle pogingen gemist die mijn manier om dit te doen zullen breken?


16
2018-01-28 14:53


oorsprong


antwoorden:


De trace functie in R doet dat. Zien ?trace.


9
2018-01-28 15:30