通过system.time调用时的表达式输出

时间:2011-02-04 13:19:24

标签: r

我编写了一个产生列表作为输出的函数,我正在进行一项实验来测量其在多种配置下运行时的性能。函数的输出是嵌套列表,对于每个配置都是非常重要的。目前,我正在使用lapply和一个随机种子值列表提供给我的函数来解决这个问题。这成功地为每个配置生成函数的输出。我的目标是扩展此实验以测量算法的每个配置的执行时间。

目前,我已经为lapply添加了一个匿名函数,它返回函数的输出以及执行时间,其中x是随机种子值,如下所示:

function(x) {
    t1<-system.time(t2 <- foo(x))[3]
    return(c(t2,t1))
 }

使用system.time时,是否有更简洁的方法来保留计算表达式的输出?谢谢

1 个答案:

答案 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)

此示例不会保存您的不同输出,因为将在所有运行中覆盖。但是你可以编写内部函数来使用给定的种子,并在你真正需要的时候附加到全局环境中的列表中。