【问题标题】:How to pass parameters from shiny ui object to a server render object如何将参数从闪亮的 ui 对象传递到服务器渲染对象
【发布时间】:2018-08-02 20:20:21
【问题描述】:

我正在构建一个闪亮的仪表板,并从同一个数据集制作许多图。我不想为我选择的每个系列制作单独的服务器 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 个单独的服务器渲染对象。我想创建 1 个带有变量“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 对象中硬编码变量以传递给服务器。

【问题讨论】:

  • 将选择函数中的列名传递给 UI 中的 selectInput() 函数。然后将字符串传递给单个图 - 考虑到输入字符串中的引号,您可能需要转换为 select_()
  • @BigDataScientist 是的,这让我很感兴趣 :) 我认为这可能正是我所需要的。我会玩这个。谢谢!
  • @RyanMorton selectInput() 对象总是显示在用户界面中吗?我会试试这个,看看我是否可以使用 selectInput() 而不显示任何类型的 ui 选择元素,因为我不希望任何用户输入可用。
  • @BigDataScientist OMG,是的。这完全是我所需要的。非常感谢!!!!

标签: r shiny


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

【讨论】:

  • 成功了。我昨天实施了这个。解决了我所有的问题。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多