You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中正确传递...可变参数解决microbenchmark测试结果异常问题

问题原因

microbenchmark的核心逻辑是对传入的未求值表达式做重复运行计时,你直接透传...的写法会触发R的求值缓存:第一次调用microbenchmark(..., times=1)运行完三个函数后,传入的f1(100)等表达式的结果已经被缓存,第二次调用microbenchmark时实际测试的是读取缓存值的速度,并非函数真实运行耗时,所以得到的时间会远低于预期。

解决方案

你只需要在自定义函数入口先捕获所有未求值的测试表达式,之后每次调用microbenchmark都传入该表达式列表即可,修改后的代码如下:

fComp = function(..., times, maxdif){
  # 捕获所有传入的测试表达式,不提前求值
  test_exprs <- substitute(...())
  # 首次预测试
  mb = microbenchmark(list = test_exprs, times = 1)
  if(max(abs(mb$time - dplyr::lead(mb$time)), na.rm = TRUE) < maxdif) {
    # 正式测试复用未求值的表达式列表,确保每次都真实运行测试函数
    mb = microbenchmark(list = test_exprs, times = times)
  }
  mb
}
验证说明

调用mb = fComp(f1(100), f2(100), f3(100), times=10, maxdif = 1e6)后查看mb$time,得到的结果会和你最初未封装时的运行结果一致。

内容的提问来源于stack exchange,提问作者blrun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:54:02