2011-02-04 21 views
0

我寫了一個函數,它產生一個列表作爲輸出,並且正在進行一個實驗來測量在多個配置下運行時的性能。函數的輸出是嵌套列表,對於每個配置都是非平凡的。目前,我正在使用lapply和隨機種子值列表提供給我的函數來解決這個問題。這成功地爲每個配置生成函數的輸出。我的目標是擴展這個實驗來衡量算法的每個配置的執行時間。由system.time調用時的表達式輸出時間

目前,我增加了一個匿名函數來lapply返回我的函數的輸出以及執行時間,其中x是隨機種子值,如下所示:

function(x) { 
    t1<-system.time(t2 <- foo(x))[3] 
    return(c(t2,t1)) 
} 

有沒有更簡潔的方式來保存使用system.time時的評估表達式的輸出?謝謝

+0

你是什麼意思,更簡潔?比單線更簡潔? – 2011-02-04 13:40:36

回答

3

對於這樣的實驗,我會推薦例如microbenchmark包,而不是system.time()調用,因爲這些包試圖以最小的開銷和提高的準確性(納秒結果)來應對挑戰。

這將要求您編寫一些函數,將這些函數的輸出保存在全局環境中,然後針對您的函數競爭運行實驗。

一個小例子:

foo <- function(x) assign(x, rnorm(1000), envir = .GlobalEnv) 
boo <- function(x) assign(x, rbeta(1000, 0.1, 0.1), envir = .GlobalEnv) 
res <- microbenchmark(foo("normal distr"), boo("beta distr"), times=100) 

本示例將無法保存您的不同輸出,這將在所有運行覆蓋。但是如果你真的需要它,你可以編寫內部函數來使用給定的種子並追加到全局環境中的列表中。