如何在微基准测试中使用列表参数
How to use list-argument in microbenchmark
如何在 microbenchmark
函数中使用列表参数。
我想对具有不同输入的相同函数进行微基准测试,如
microbenchmark(j1 = {sample(1e5)},
j2 = {sample(2e5)},
j3 = {sample(3e5)})
以下不会运行,因为列表将只包含向量而不是未计算的表达式。
microbenchmark(list = list(j1 = {sample(1e5)},
j2 = {sample(2e5)},
j3 = {sample(3e5)))
我还想使用例如生成列表lapply
.
我们需要使用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)))}) )
只需使用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
handles its arguments as if they described function arguments. So the values are not evaluated, and tagged arguments with no value are allowed whereas list simply ignores them.
如何在 microbenchmark
函数中使用列表参数。
我想对具有不同输入的相同函数进行微基准测试,如
microbenchmark(j1 = {sample(1e5)},
j2 = {sample(2e5)},
j3 = {sample(3e5)})
以下不会运行,因为列表将只包含向量而不是未计算的表达式。
microbenchmark(list = list(j1 = {sample(1e5)},
j2 = {sample(2e5)},
j3 = {sample(3e5)))
我还想使用例如生成列表lapply
.
我们需要使用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)))}) )
只需使用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
handles its arguments as if they described function arguments. So the values are not evaluated, and tagged arguments with no value are allowed whereas list simply ignores them.