【问题标题】:Examine which row/function in R code takes the most time within function?检查 R 代码中的哪一行/函数在函数中花费的时间最多?
【发布时间】:2019-01-20 22:16:01
【问题描述】:

我有一组在包装器中运行的函数:

wrapper_func <- function(x,y,z,.....) {

t <- foo1(x,y)
kuku <- foo2(t,z)
....
final_res <- foo20(t, kuku, ...)

return(final_res)

}

它运行缓慢,我想了解谁是瓶颈/麻烦制造者。 请告知哪个函数可以执行更深入的分析(基准?微基准?...),这将显示向下钻取 - 哪个行/函数占用最多的时间/资源?

我发现了另一个option

然后转到使用 lineprof 进行内存分析一章。

你怎么看?

【问题讨论】:

  • 我没有投反对票,但我认为他们不喜欢您的示例不可重现,或者认为很容易找到重复的问题。

标签: r profiling performance-testing


【解决方案1】:

您可以使用Rprof 来分析您的 R 代码并找出性能瓶颈;这是一个简短的例子

tmp <- tempfile()
Rprof(tmp)
example(glm)
Rprof()
summaryRprof(tmp)

更详细的描述可以在this R-bloggers article找到。

【讨论】:

  • @steves 我不知道为什么你的问题被否决了。但是,请注意,要求人们支持您的问题被认为是对 SO 的粗鲁行为,并且很可能适得其反(即导致更多的反对票)。保护问题不会阻止投票(见stackoverflow.com/help/privileges/protect-questions);此外,保护问题保留给访问量非常大的问题,因为这些问题往往会吸引大量无用的答案。您的问题显然不属于该类别。
【解决方案2】:

您可以打印microbenchmark 结果以查看您的性能瓶颈:

library(microbenchmark)

wrapper_func <- function(x,y,z,.....) {

  t <- foo1(x,y)
  print(microbenchmark(foo1(x,y)))
  kuku <- foo2(t,z)
  print(microbenchmark(foo2(t,z)))
  ....
  final_res <- foo20(t, kuku, ...)
  print(microbenchmark(foo20(t, kuku, ...)))

  return(final_res)

}

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 2019-03-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多