2011-01-28 64 views
16

Một đồng nghiệp gần đây đã xem biểu đồ cuộc gọi và muốn xem cái gì được gọi là gì. Chúng tôi sắp xếp rằng với foodweb từ mvbutils, nhưng tôi đã tự hỏi về cách tốt nhất để tạo ra một trang trí (trong python nói) trong R. Vì vậy, tôi đã làm điều này:Viết trình trang trí cho các chức năng 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) 
} 

này cho phép tôi làm:

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

và bây giờ tôi có thể làm cho chức năng tự đăng nhập bằng cách gói nó:

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

đã này được thực hiện trước, trong một gói nói, và tôi đã bỏ lỡ bất kỳ gotchas rằng sẽ phá vỡ con đường của tôi để làm điều này?

+1

Câu hỏi công bằng, đối tượng sai. IMNSHO bạn rõ ràng cần phải hỏi điều này trên 'r-devel'. –

+3

Miễn là Gabor nằm trong đối tượng khán giả, đúng đối tượng của nó. – Spacedman

+2

Câu hỏi hay. Mặc dù câu trả lời đã được chấp nhận, tôi muốn xem một tiểu thuyết/bách khoa toàn diện hơn :) – fmark

Trả lời

9

Chức năng trace trong R thực hiện điều đó. Xem ?trace.

Các vấn đề liên quan