【问题标题】:How do I use the output generated from another output with a Shiny app?如何将另一个输出生成的输出用于 Shiny 应用程序?
【发布时间】:2017-05-11 23:07:07
【问题描述】:

我想使用基于多个输出中的输入生成的数据框。有没有一种方法可以只生成一次此输出,而不是为每个输出都生成一次?

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

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 中是否有一种方法,我只需运行一次此查询即可使我的应用程序更高效?

谢谢

【问题讨论】:

    标签: r input shiny output


    【解决方案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)
    })
    

    【讨论】:

    • 回复晚了,但感谢您的回答。我将其标记为答案并将其实现到我的应用中。
    猜你喜欢
    • 2019-08-09
    • 2018-08-06
    • 2017-11-10
    • 2010-10-02
    • 1970-01-01
    • 2019-06-13
    • 2019-12-01
    • 2011-08-28
    • 2012-01-22
    相关资源
    最近更新 更多