【问题标题】:How to dynamically generate Shiny sidebarPanel contents?如何动态生成闪亮的侧边栏面板内容?
【发布时间】:2015-02-14 12:24:32
【问题描述】:

我正在尝试创建一个应用程序,其中最初向用户显示一个侧边栏 selectInput,其中包含一个选项列表:A、B、C 和 D——由文件系统内容填充。

根据用户选择的选项,我想用特定于选项的内容填充侧边栏的其余部分。例如,如果用户选择“A”,那么侧边栏将包含一个额外的selectInputdateRangeInput

为了保持代码简洁,我将所有“A”特定代码保留在handle_A.R 等。这意味着最终当我决定添加一个新选项“E”时,我只需要将所有代码在handle_E.R

ui.R

pageWithSidebar(
  headerPanel("Test"),
  sidebarPanel(
    selectizeInput("choice", "Choice:", c()),
    uiOutput("sidebar")
  ),
  mainPanel(uiOutput("main"))
)

server.R(相关位)

output$sidebar <- renderUI({
  sidebarRenderer[[input$choice]](input, output, session)
})

我在 server.R 中有代码来源所有 handle_*.R 脚本 - 每个都注册他们的回调。

到目前为止,一切都很好。我可以选择各种选项并调用相关的回调。但是,我不知道如何实现回调,以便在用户与侧边栏交互时更新侧边栏小部件。我想基本上做以下事情(这是行不通的,因为函数需要返回一些东西给renderUI):

handle_A.R

sidebarRenderer[["A"]] <<- function(input, output, session) {
  selectInput("day", "Day:", c("Mon", "Wed", "Fri"))
  dates <- getDateList(input$day)
  dateRangeInput("date", "Date:", start=dates[0], end=dates[length(dates)])
  if (hasPublicHoliday(dates))
    checkboxInput("ignoreHolidays", "Ignore public holidays")
}

所以我想要的是将dateRangeInput 自动更新为相应的周一/周三/周五的计算开始和结束日期。此外,如果任何日期包含公共假期,我想显示一个额外的复选框让用户忽略公共假期。

如果有人可以帮助我,我将不胜感激!

【问题讨论】:

  • 您能否将完整的、可运行的应用程序作为 Gist 提供?我不明白你描述的应用程序的架构。
  • 感谢 Jeff,但我使用 observeupdateCheckboxInput 解决了这个问题。

标签: r shiny shiny-server


【解决方案1】:

结果我只需要将逻辑放入observe 并调用updateCheckBoxInput

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 2016-02-26
    • 2015-10-27
    • 2017-11-26
    • 2021-12-13
    • 2017-06-28
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多