如何使用Shiny应用程序使用另一个输出生成的输出?

时间:2016-12-27 16:46:41

标签: r input shiny output

我想使用基于多个输出中的输入生成的数据帧。有没有办法只生成一次这个输出而不是为每个输出做这个?

例如,用户将生成他们的输入,例如日期

dateRangeInput("date", label = "Delivered Date Range: ", start = ld, end = hd)

然后我将在多个输出中使用该日期范围输入。但是,两个输出需要相同的查询才能使用该输入获得相同的数据帧。

output$p1 <- renderPlotly({
  q1 <- "
  SELECT *
  FROM table
  WHERE date > '"
  q2 <- input$date[1]
  q3 < "'"
  p1_df <- sqlQuery(DS, q)
  plot_ly(data = p1_df, x = ~x, y = ~y)
})

output$p2 <- renderPlotly({
  q1 <- "
  SELECT *
  FROM table
  WHERE date > '"
  q2 <- input$date[1]
  q3 < "'"
  p2_df <- sqlQuery(DS, q)
  plot_ly(data = p2_df, x = ~x, y = ~y)
})

在Shiny中是否有一种方法我只需要运行此查询一次以使我的应用程序更有效率?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以将查询移动到被动功能(应用程序“服务器”部分内的功能):

sqlData <- reactive({
  q1 <- "
  SELECT *
  FROM table
  WHERE date > '"
  q2 <- input$date[1]
  q3 < "'"
  p1_df <- sqlQuery(DS, q)
  return(p1_df)
})

然后在renderPlotly中调用它:

output$p1 <- renderPlotly({
  p1_df <- sqlData()
  plot_ly(data = p1_df, x = ~x, y = ~y)
})

output$p2 <- renderPlotly({
  p2_df <- sqlData()
  plot_ly(data = p2_df, x = ~x, y = ~y)
})