1

我刚刚得到了一份工作,通过提高用于计算数据的算法的效率来帮助加速 R 中的程序。有许多循环进行不同的计算,我想知道哪些循环最终使用最多的资源。我想知道如何计算循环完全完成所需的时间。我可以使用这些信息来确定要优化哪些算法,甚至可以编写一个 C 扩展来处理计算。

4

3 回答 3

2

您可以使用:

  • Sys.time()或者system.time()
  • rbenchmark包裹_
  • microbenchmark包裹_
  • 或分析器(例如?RProf
于 2012-12-04T18:39:12.420 回答
2

Rprof用来告诉在哪里看。它会生成一个堆栈样本文件,我只查看随机选择的一小部分,比如 10 个。或者我只是让样本之间的时间足够大,这样我就不会得到太多的样本。

这有两个原因。

1)通过实际检查单个堆栈样本,用你自己的眼睛,你可以看到简单统计没有暴露的问题,因为通过查看堆栈,你可以看到事情发生的原因。这告诉你是否可以摆脱它,这是基本信息。

2) 如果您看到这样一种可以改进的活动模式,您只需在多个样本上看到它就知道它值得修复。所有额外的样本,如果它们意味着你不能做(1),实际上是有害的。

于 2012-12-04T22:44:21.447 回答
1

这是使用另一个 SO 问题中的基准的示例,该示例使用tapplyvs byvs进行了比较data.table根据评论进行编辑

library(rbenchmark)  

           # Different tests being compared
benchmark( using.tapply = tapply(x[, 1], x[, "f"], mean),
           using.by = by(x[, 1], x[, "f"], mean), 
           using.dtable = dt[,mean(col1),by=key(dt)]), 

           # Number of reps. How results are.
           replications = 250, order = "relative"
          )   

#------------------------#
#         RESULTS        # 
#------------------------#


#   COMPARING data.table VS tapply VS by   #
#------------------------------------------#
#             test elapsed relative
#   2  using.dtable   0.168    1.000
#   1  using.tapply   2.396   14.262
#   3      using.by   8.566   50.988
于 2012-12-04T18:41:38.973 回答