如何将参数从闪亮的ui对象传递到服务器渲染对象

时间:2018-08-02 20:20:22

标签: r shiny

我正在构建一个闪亮的仪表板,并从同一数据集中进行许多绘图。与其为每个选择的系列制作单独的服务器output $ name对象,不如让一个服务器对象带有一个变量,然后将一个变量传递给每个ui对象,以指示我要显示的系列。

ui <- dashboardPage(
    fluidRow(

      column(width = 6,
        box(title = "Net Income", width=NULL,
          dygraphOutput(outputId = "net_income", height = "300px"))
             ),

       column(width = 6,
         box(title = "Accounts Receivable", width=NULL,
            dygraphOutput(outputId = "accounts", height = "300px"))
              )  
) # end ui

请注意我正在创建的多个服务器对象,这些对象从单个对象fcast_data中选择要显示的系列。我正在从该数据集中显示10个图表,因此必须产生10个单独的服务器渲染对象。我想创建一个带有变量“ series_name”的服务器对象,我可以从ui对象中传递该变量以指示要显示的系列。

server <- function(input, output) { 
  output$net_income <- renderDygraph({ 
    dygraph(fcast_data %>% select(net_income), group = "my_dash")})

  output$accounts_receivable <- renderDygraph({ 
     dygraph(fcast_data %>% select(accounts_receivable), group = "my_dash")})

} # end server

有没有一种方法可以使一个服务器对象(renderDygraph)仅从ui对象(dygraphOutput)中获取参数来选择要显示的系列?我知道如何使用selectInputs来做到这一点,但无法弄清楚如何对ui对象中的变量进行硬编码以传递给服务器。

1 个答案:

答案 0 :(得分:1)

出于完整性考虑:就像我在评论中提到的那样,可以在此处找到一个示例: https://shiny.rstudio.com/gallery/creating-a-ui-from-a-loop.html

如果无法使用给定的代码对其进行测试,则可能与此类似:

types <- c("net_income", "accounts_receivable")

# server
lapply(1:2, function(nr) {
  output[[paste0("dy_g", nr)]] <- renderDygraph({ 
    dygraph(fcast_data %>% select(get(types[nr])), group = "my_dash")
  })
}

# ui
lapply(1:2, function(nr) {
  column(width = 6,
         box(title = types[nr], width=NULL,
             dygraphOutput(outputId = paste0("dy_g", nr), height = "300px"))
  )
})