我刚刚得到了一份工作,通过提高用于计算数据的算法的效率来帮助加速 R 中的程序。有许多循环进行不同的计算,我想知道哪些循环最终使用最多的资源。我想知道如何计算循环完全完成所需的时间。我可以使用这些信息来确定要优化哪些算法,甚至可以编写一个 C 扩展来处理计算。
问问题
151 次
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 问题中的基准的示例,该示例使用tapply
vs by
vs进行了比较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 回答