将函数列表传递给要评估的“microbenchmark”

Pass list of functions to `microbenchmark` to be evaluated

我有一个名为 dir.

的文件目录

我想 运行 在 dir 中的每个文件上调用一个名为 f(file, arg1, arg2) 的函数。

我想在 microbenchmark.

中对这些函数中的每一个进行基准测试

如何创建一个名为 funcs 的函数列表以进行评估,如下所示:

$a
f("file1", arg1, arg2)

$b
f("file2", arg1, arg2)

$c
f("file3", arg1, arg2)

这样我就可以直接调用 microbenchmark::microbenchmark(funcs)?

您需要创建一个未计算表达式的列表。一种方法是将 lapply 参数传递给 bquote 来构建这些表达式。然后确保将该列表绑定到 microbenchmark()list= 参数。例如

tests <- lapply(paste0("file", 1:3), function(x) {
  bquote(f(.(x), arg1, arg2))
})
microbenchmark(list=tests)

这是一个可重现的例子

tests <- lapply(c(1,10,100), function(x) {
  bquote(rnorm(.(x)))
})
microbenchmark::microbenchmark(list=tests)
# Unit: microseconds
#        expr min  lq  mean median  uq  max neval cld
#    rnorm(1) 1.4 1.5 1.783    1.6 1.7 15.5   100 a  
#   rnorm(10) 1.9 2.1 2.253    2.2 2.3  4.0   100  b 
#  rnorm(100) 7.8 8.1 8.741    8.5 9.0 12.7   100   c