我刚刚得到了一份工作,通过提高用于计算数据的算法的效率来帮助加速R中的程序。有许多执行不同计算的循环,我想知道哪些循环最终使用了最多的资源。我想知道如何计算一个循环完全结束所需的时间。我可以使用这些信息来确定要优化哪些算法,甚至可以编写一个处理计算的C扩展。
发布于 2012-12-05 02:39:12
您可以使用:
Sys.time() or system.time()rbenchmark packagemicrobenchmark package?RProf)发布于 2012-12-05 06:44:21
我用Rprof告诉你去哪里找。它生成一个堆栈样本文件,我只查看其中的一小部分,比如随机选择的10个。或者我只是让样本之间的时间足够大,这样一开始我就不会得到太多的样本。
这有两个原因。
1)通过实际检查单个堆栈样本,您可以亲眼看到简单的统计数据无法揭示的问题,因为通过查看堆栈,您可以看到正在进行操作的原因。这告诉你是否可以摆脱它,这是最基本的信息。
2)如果你看到这样一种你可以改进的活动模式,你只需在多个样本上看到它,就知道它值得修复。所有额外的样本,如果它们意味着你不能做(1),实际上是有害的。
发布于 2012-12-05 02:41:39
这是一个使用another SO questions的基准测试的例子,它使用tapply、by和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.988https://stackoverflow.com/questions/13709583
复制相似问题