我有一个关于 R Shiny 的问题,尤其是关于提高我的 Shiny 应用程序性能的方法。我正在使用一些需要很长时间才能运行的 SQL 查询以及一些需要时间才能显示的情节。我知道可以使用future
,promises
但我不知道如何在反应式表达式中使用它们。
我在下面向您展示一个非常简单的示例:
library(shiny)
library(ggplot2)
library(plotly)
library(dplyr)
ui <- fluidPage(
selectInput("id1", "Choose:", choices = unique(as.character(iris$Species))),
dataTableOutput("my_data"),
plotlyOutput("my_plot")
)
server <- function(input, output, session) {
output$my_data <- renderDataTable({
iris %>% filter(Species == input$id1)
})
data_to_plot <- reactive({
Sys.sleep(10)
res <- ggplot(iris %>% filter(Species == input$id1), aes(x=Sepal.Length)) + geom_histogram()
return(res)
})
output$my_plot <- renderPlotly({
ggplotly(data_to_plot())
})
}
shinyApp(ui, server)
在这种情况下,我们可以看到应用程序在显示整个应用程序之前等待绘图部分结束计算。但是,即使带有绘图的部分尚未完成计算,我也希望显示数据表。
非常感谢您的帮助!