Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何分析特定函数在R中运行的时间长度_Performance_R_Profiling_Benchmarking_Bioinformatics - Fatal编程技术网

Performance 如何分析特定函数在R中运行的时间长度

Performance 如何分析特定函数在R中运行的时间长度,performance,r,profiling,benchmarking,bioinformatics,Performance,R,Profiling,Benchmarking,Bioinformatics,我刚刚得到一份工作,通过提高用于计算数据的算法的效率来帮助R中的程序加速。有许多循环进行不同的计算,我想知道哪些循环最终使用了最多的资源。我想知道如何计算循环完成所需的时间。我可以利用这些信息来找出要优化的算法,甚至可以编写一个C扩展来处理计算。您可以使用: Sys.time()或system.time() rbenchmark包 microbenchmark包 或探查器(例如,?RProf) 您可以使用: Sys.time()或system.time() rbenchmark包 micro

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

您可以使用:

  • Sys.time()
    system.time()
  • rbenchmark
  • microbenchmark
  • 或探查器(例如,
    ?RProf
您可以使用:

  • Sys.time()
    system.time()
  • rbenchmark
  • microbenchmark
  • 或探查器(例如,
    ?RProf

这里是一个使用基准的示例,使用
tapply
vs
by
vs
数据进行比较。表
:根据注释编辑


这里是一个使用基准的示例,使用
tapply
vs
by
vs
数据进行比较。表
:根据注释编辑


我用
Rprof
告诉你去哪里找。 它生成了一个堆栈样本文件,我只看了其中的一小部分,比如随机选择的10个。 或者我只是让样本之间的时间足够大,这样我就不会有太多的样本开始

这有两个原因

1) 通过亲自检查单个堆栈样本,您可以看到简单统计数据无法暴露的问题,因为通过查看堆栈,您可以看到为什么要执行这些操作。这告诉你是否可以摆脱它,这是最基本的信息

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

我用
Rprof
告诉你去哪里找。 它生成了一个堆栈样本文件,我只看了其中的一小部分,比如随机选择的10个。 或者我只是让样本之间的时间足够大,这样我就不会有太多的样本开始

这有两个原因

1) 通过亲自检查单个堆栈样本,您可以看到简单统计数据无法暴露的问题,因为通过查看堆栈,您可以看到为什么要执行这些操作。这告诉你是否可以摆脱它,这是最基本的信息

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

所有的
表达式是怎么回事。我喜欢将它们保存为表达式,以便在所有测试中轻松更改输入。(另外,我发现它在
test
列中提供了更好的输出)
benchmark(使用.tapply=tappyl(x[,1],x[,“f”],mean),使用.by=by(x[,1],x[,“f”],mean),使用.dtable=dt[,mean(col1),by=key(dt)],replications=10,order='relative')
。。。无论
x
dt
是什么,只要将
..
参数命名为:
基准测试(使用.tapply=tapply(x[,1],x[,“f”],mean))
。将每个测试放在自己的行上。然后您可以轻松地添加/删除它们。使用
expression
时,我看到的最大问题是,你可能会把看你的代码的人弄糊涂。所有
expression
s有什么用?@GSee。我喜欢将它们保存为表达式,以便在所有测试中轻松更改输入。(另外,我发现它在
test
列中提供了更好的输出)
benchmark(使用.tapply=tappyl(x[,1],x[,“f”],mean),使用.by=by(x[,1],x[,“f”],mean),使用.dtable=dt[,mean(col1),by=key(dt)],replications=10,order='relative')
。。。无论
x
dt
是什么,只要将
..
参数命名为:
基准测试(使用.tapply=tapply(x[,1],x[,“f”],mean))
。将每个测试放在自己的行上。然后您可以轻松地添加/删除它们。使用
expression
时,我看到的最大问题是,您可能会混淆查看代码的其他人。您是否按顺序列出了他们?对于第一个要点,您可以使用
beg Thank you,这非常有帮助!您是否按顺序列出了它们?对于第一个要点,您可以使用
乞求谢谢,这非常有帮助!
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