测量Shiny内部的执行速度

时间:2014-12-27 04:41:56

标签: r shiny execution-time

我正在开发一款Shiny app。

我感兴趣的是计算执行某些代码块所需的时间(例如ggplot等)。

出于某种原因,似乎使用通常的计时方法不能在被动呼叫中工作,例如:

output$R1_C1 <- renderPlot({

beginning <- Sys.time()

<lots of code here> 

end <- Sys.time()
print(end - beginning)

R抱怨并给我

Error in (structure(function (input, output)  : 
  object 'beginning' not found

有没有人找到一种成功的方法来计算Shiny中被动呼叫的执行速度?

3 个答案:

答案 0 :(得分:4)

这适用于我的系统:

library(shiny)
runApp(list(
  ui = bootstrapPage(
    numericInput('n', 'Number of obs', 100),
    plotOutput('plot')
  ),
  server = function(input, output) {
    output$plot <- renderPlot({
      beginning <- Sys.time()
      h <- hist(runif(input$n)) 
      end <- Sys.time()
      print(end - beginning)
      h
    })
  }
))

答案 1 :(得分:0)

profvis包可能很有用。例如:

library(shiny)
library(profvis)

profvis({

  sApp <- shinyApp(

    ui = fluidPage(
      numericInput('n', 'Number of obs', 100, min = 1, max = 200),
      plotOutput('plot')
    ),

    server = function(input, output) {

      dfTable <- reactive({
        as.data.frame(matrix(rnorm(10 * input$n, mean = 5), ncol = input$n))
      })

      vMeans <- reactive({
        apply(dfTable(), 2, mean)
      })

      output$plot <- renderPlot({
        hist(vMeans())
      })
    }
  )

  runApp(sApp)
})

答案 2 :(得分:0)

类似地,您可以使用如下所示的流行tictoc软件包。我之所以更喜欢它,是因为您可以轻松地使用多个tic-toc标签来测量反应式或渲染表达式中的子例程。

library(shiny)
library(tictoc)

runApp(list(
  ui = bootstrapPage(
    numericInput('n', 'Number of obs', 100),
    plotOutput('plot')
  ),
server = function(input, output) {
    output$plot <- renderPlot({
    
    tic("execution time - Histgram")
    hist(runif(input$n)) 
    toc()

    tic("execution time - Print")
    print("this is a second task within 'renderPlot' ")
    toc()
  })
 }
))