我目前正在測試R中的一些性能關鍵算法,我正在尋找一種簡單的方法來完成這些基準測試並獲得清晰的總結。所以我找到了經常使用的rbenchmark
包。但這並不適合我的需求。我的算法通常取決於某些參數,或者有不同的「典型」數據集,應該可以批量測試。R中基準(性能分析)的最佳方式是什麼?
我的電流速正髒溶液是(與其中max /中位數是10^6和5×10^6個隨機數測試了相當愚蠢,但簡單的例子)
library(rbenchmark)
multi.benchmarks <- function(..., settings) {
res <- NULL
for (i in 1:length(settings)) {
env <- new.env()
eval(settings[[i]], env)
tres <- benchmark(..., environment = env)
res <- rbind(res, cbind(names(settings)[i], tres))
}
names(res)[1] <- "setting"
return(res)
}
multi.benchmarks(mean = expression(mean(x)), median = expression(median(x)),
settings = list(s1 = expression({x <- runif(1E6)}),
s2 = expression({x <- runif(5E6)})),
replications = 3)
這返回:
setting test replications elapsed relative user.self sys.self user.child sys.child
1 s1 mean 3 0.00 NA 0.00 0.00 NA NA
2 s1 median 3 0.16 NA 0.14 0.01 NA NA
3 s2 mean 3 0.03 1 0.04 0.00 NA NA
4 s2 median 3 0.57 19 0.51 0.07 NA NA
這或多或少是我想要的,但我仍然失蹤:
- 一個簡單的語法(表達式讀v ia
substitute(...)
等)和 - 更多可能的參數 - 例如,
my_benchmark(algorithm(dataset, a, b), algorithm = list(func1, func2), a = list(1,2), b = list(10, 20), replications = 3)
是運行8個不同基準測試的好方法:對於func1/func2以及所有可能的值a
和b
的所有組合。 - 檢測一些並不需要的PARAMS:如果
func1
有參數a
和b
和func2
只是有一個參數a
但不b
,那麼我們將只有6種可能的組合。 - 更詳細的輸出,例如可以選擇獲得N個重複後所有運行時間的平均值和標準偏差的額外列。
也許它會花費我只是幾天的時間寫一個基準包,它能夠做所有這些事情,仍然有某種向下兼容於rbenchmark,但在我開始做這個,我會喜歡問你:
- 是否還有其他值得推薦的基準解決方案,我應該考慮?
- 您是否認爲具有此類功能的更復雜的基準測試包對R社區普遍感興趣? (我正在考慮一個新的軟件包)
查看Hadley Wickham的[Performance](http://adv-r.had.co.nz/Performance.html) – zx8754 2014-09-05 13:02:06