2012-11-15 35 views
2

我正在編寫一個相對複雜的函數來執行從頭到尾的數據分析。這個函數調用我寫過的很多子函數(它們本身稱爲子子函數等)。我正在尋找一種工具來告訴我我的函數在每個子函數上花費了多少時間,以便查看我應該在哪裏查找性能改進。類似MATLAB的profiler會很好。調用其他函數的函數的性能分析

例如,一個假設功能audit

#fun1 is called by fun2 
fun1 <- function() { 
    rnorm(100000) 
} 

fun2 <- function(x) { 
    y <- x+1 
    z <- y*fun1() 
} 

mainFun <- function() { 
    z+3 
} 

audit(mainFun()) 
> mainFun = 1 s; of which 95% is in fun1 and 98% is fun2 

很顯然,我可以用microbenchmark()system.time()爲每個獨立的功能 - 但使用這種作爲mainFun變得更加複雜,實際上變成棘手。有沒有現成的工具呢?

回答

5

使用谷歌搜索R profiler會引導您到Rprof函數,這正是你正在尋找的。實質上,您可以撥打Rprof()並正常運行您的腳本。 summaryRprof函數是總結探查器結果的簡便方法。有關更多詳細信息,請參閱?RprofTidying and profiling R code的章節Writing R Extensionsthis link,this SO question或甚至this set of SO questions

+0

這裏也介紹了一些關於R剖析的很好的討論:http://stackoverflow.com/questions/3650862/how-to-efficiently-use-rprof-in-r –

+0

+我用過'rprof',很高興(這是一些)。我不在乎彙總工具。我只是抓住堆棧跟蹤結果文件並檢查它們。 –

相關問題