我编写了一个产生列表作为输出的函数,我正在进行一项实验来测量其在多种配置下运行时的性能。函数的输出是嵌套列表,对于每个配置都是非常重要的。目前,我正在使用lapply和一个随机种子值列表提供给我的函数来解决这个问题。这成功地为每个配置生成函数的输出。我的目标是扩展此实验以测量算法的每个配置的执行时间。
目前,我已经为lapply添加了一个匿名函数,它返回函数的输出以及执行时间,其中x是随机种子值,如下所示:
function(x) {
t1<-system.time(t2 <- foo(x))[3]
return(c(t2,t1))
}
使用system.time时,是否有更简洁的方法来保留计算表达式的输出?谢谢
答案 0 :(得分:3)
对于这样的实验,我建议例如microbenchmark包而不是system.time()
次调用,因为这些包试图以最小的开销和更高的准确性(以纳秒为单位)处理挑战。
这将要求您编写一些函数,保存全局环境中的函数输出,然后针对您的函数竞争运行实验。
一个小例子:
foo <- function(x) assign(x, rnorm(1000), envir = .GlobalEnv)
boo <- function(x) assign(x, rbeta(1000, 0.1, 0.1), envir = .GlobalEnv)
res <- microbenchmark(foo("normal distr"), boo("beta distr"), times=100)
此示例不会保存您的不同输出,因为将在所有运行中覆盖。但是你可以编写内部函数来使用给定的种子,并在你真正需要的时候附加到全局环境中的列表中。