Недавно коллега смотрел на графики вызовов и хотел посмотреть, что называется. Мы отсортировали, что с пищевой цепи от 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
уже это было сделано раньше, в упаковке говорит, и я пропустил какие-либо подводные камни, которые портят мой способ сделать это?
Справедливый вопрос, неправильная аудитория. IMNSHO вам явно нужно задать это на 'r-devel'. –
Пока Габор находится в аудитории, его правильная аудитория. – Spacedman
Большой вопрос. Хотя ответ был принят, я хотел бы увидеть более канонический/энциклопедический один :) – fmark