如何在microbenchmark中使用list-argument

时间:2015-10-05 14:20:01

标签: r microbenchmark

如何使用microbenchmark函数中的list-argument。 我想用不同的输入微功能标记相同的功能,如

microbenchmark(j1 = {sample(1e5)},
               j2 = {sample(2e5)},
               j3 = {sample(3e5)})

以下内容不会飞,因为列表只包含向量而不是未评估的表达式。

microbenchmark(list = list(j1 = {sample(1e5)},
                          j2 = {sample(2e5)},
                          j3 = {sample(3e5)))

我还想用例如生成列表来生成列表。 lapply

2 个答案:

答案 0 :(得分:4)

只需使用alist

microbenchmark(list = alist(a = Sys.sleep(0.005), b = Sys.sleep(0.01)))
#> Unit: milliseconds
#>  expr      min       lq      mean    median        uq       max neval cld
#>     a  5.02905  5.15946  5.447538  5.446029  5.612429  6.030764   100  a 
#>     b 10.04997 10.18264 10.431011 10.459569 10.547814 11.058911   100   b
  

alist处理其参数,就好像它们描述了函数参数一样。因此,不评估值,并且允许没有值的标记参数,而list只是忽略它们。

答案 1 :(得分:3)

我们需要使用substitutebquote函数来获取列表中未评估的表达式,例如

microbenchmark(list = list(j1 = bquote({sample(1e5)}),
                           j2 = bquote({sample(2e5)}),
                           j3 = bquote({sample(3e5)})))

可以使用lapply生成作业,但我们必须小心环境

jobs = lapply(1000*1:3, function(s) local({s = s; bquote(sample(.(s)))}) )