如何使用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
。
答案 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)
我们需要使用substitute
或bquote
函数来获取列表中未评估的表达式,例如
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)))}) )