有一些答案SO時間比較沒有檢查結果。但是,我更喜歡快速查看錶達式是否正確和。檢查microbenchmark結果失敗data.table更改通過引用
microbenchmark
包支持check
參數。不幸的是,檢查在通過引用改變data.table
的表達方式上失敗,即檢查不能識別結果不同。
案例1:data.table表達,其中檢查工作正常
library(data.table)
library(microbenchmark)
# minimal data.table 1 col, 3 rows
dt <- data.table(x = c(1, 1, 10))
# define check function as in example section of help(microbenchmark)
my_check <- function(values) {
all(sapply(values[-1], function(x) identical(values[[1]], x)))
}
基準的情況下,被設計成返回不同的結果。因此,
microbenchmark(
f1 = dt[, mean(x)],
f2 = dt[, median(x)],
check = my_check
)
返回按預期的錯誤消息:
Error: Input expressions are not equivalent.
情況2:其中檢查失敗
現在data.table表達式中,表達式被修改以引用的改變dt
。請注意,使用相同的檢查功能。
microbenchmark(
f1 = dt[, y := mean(x)],
f2 = dt[, y := median(x)],
check = my_check
)
回報現在
expr min lq mean median uq max neval cld
f1 576.947 625.174 642.9820 640.7110 661.1870 732.391 100 a
f2 602.022 658.384 684.7076 678.9975 694.0825 978.600 100 b
所以,對結果的檢查已在這裏失敗了,儘管兩人的表情是不同。 (時間是無關緊要的。)
據我所知,檢查被確定失敗,因爲dt
被引用改變。因此,在比較每個表達式的結果時,總是會在最後一次更改的狀態中引用同一個對象。
問題
如何我可以修改檢查功能和/或表達,以便可靠地檢查將檢測即使在data.table
的情況不同,結果以參考文獻的改變?
非常感謝您,這是一個簡單明瞭的解決方案,簡潔易用。 +2的提示單獨測試'copy()'。 – Uwe