R Shiny - 如何在渲染函数之间共享变量?

lau*_*kok 2 r shiny

我有从ui.R获得的变量,我想在renderUI和renderPlot函数中使用它们,如下所示,

shinyServer(

  function(input, output, session) {

  output$text <- renderUI({

      # Sites.
      site1 = input$site1
      site2 = input$site2
      site3 = input$site3
      site4 = input$site4

    })

    output$plot = renderPlot({

      # Sites.
      site1 = input$site1
      site2 = input$site2
      site3 = input$site3
      site4 = input$site4

    })

})
Run Code Online (Sandbox Code Playgroud)

我必须重复两次变量,有什么方法可以将它们放在一个地方并在函数之间共享它们吗?如果我把变量放在这些函数之外,我会得到错误.

有任何想法吗?

小智 6

您可以创建另一个返回列表的反应函数,如下所示:

shinyServer(
  function(input, output, session) {

    site <- reactive({
      unlist(list("site1" = input$site1, 
                  "site2" = input$site2, 
                  "site3" = input$site3, 
                  "site4" = input$site4))
    }

    output$text <- renderUI({
         site = site()
    })

    output$plot = renderPlot({
         site = site()
    })
})
Run Code Online (Sandbox Code Playgroud)

然后你可以通过简单的方式调用site1site[1].

希望这可以帮助!