我正在开发一款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中被动呼叫的执行速度?
答案 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()
})
}
))