所以我想要一些类似于microbenchmark的东西,但我不想给我的代码计时,我想知道它失败的频率(如果有的话)。从本质上讲,我想测试一些东西,比如
f1 <- function(x){
x^2 - 1
}
lims <- rnorm(2)
try(uniroot(f1, lims))大量的测试次数(例如,10^6次测试),然后记录失败的频率。当然,在这个简单的例子中,它只是归结为在lims中只有1或-1中的一个。一般来说,我不会知道这一点。
我需要解决一个多项式作为一个闪亮的应用程序的一部分。我想保持应用程序尽可能干净,所以我想避免用户指定uniroot限制。因此,我编写了一个自适应方法,一些模拟表明它是有效的,但我想要多次测试它。
发布于 2020-05-06 21:59:09
可能编写自己的函数也很容易做到这一点。可能是这样的:
count_failures <- function(f, n = 1e3, ...)
{
n_failures <- 0
for(i in seq(n))
{
tryCatch(f(...), error = function(e) n_failures <<- n_failures + 1)
}
cat("Function \"", deparse(substitute(f)), "\" failed on ", n_failures,
" out of ", n, " runs. (", 100*n_failures/n, "%)\n", sep = "")
}现在,我们将看到它是如何与您的设置一起工作的:
f1 <- function(x){
x^2 - 1
}
f2 <- function()
{
lims <- rnorm(2)
uniroot(f1, lims)
}
count_failures(f2)
#> Function "f2" failed on 552 out of 1000 runs. (55.2%)
count_failures(f2, 1e5)
#> Function "f2" failed on 56702 out of 1e+05 runs. (56.702%)https://stackoverflow.com/questions/61636759
复制相似问题