首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有类似于microbenchmark的东西可以告诉你代码失败的频率?

有没有类似于microbenchmark的东西可以告诉你代码失败的频率?
EN

Stack Overflow用户
提问于 2020-05-06 21:43:49
回答 1查看 24关注 0票数 1

所以我想要一些类似于microbenchmark的东西,但我不想给我的代码计时,我想知道它失败的频率(如果有的话)。从本质上讲,我想测试一些东西,比如

代码语言:javascript
复制
f1 <- function(x){
  x^2 - 1
}

lims <- rnorm(2)

try(uniroot(f1, lims))

大量的测试次数(例如,10^6次测试),然后记录失败的频率。当然,在这个简单的例子中,它只是归结为在lims中只有1或-1中的一个。一般来说,我不会知道这一点。

我需要解决一个多项式作为一个闪亮的应用程序的一部分。我想保持应用程序尽可能干净,所以我想避免用户指定uniroot限制。因此,我编写了一个自适应方法,一些模拟表明它是有效的,但我想要多次测试它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-06 21:59:09

可能编写自己的函数也很容易做到这一点。可能是这样的:

代码语言:javascript
复制
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 = "")
}

现在,我们将看到它是如何与您的设置一起工作的:

代码语言:javascript
复制
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%)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61636759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档