【发布时间】:2015-02-14 12:24:32
【问题描述】:
我正在尝试创建一个应用程序,其中最初向用户显示一个侧边栏 selectInput,其中包含一个选项列表:A、B、C 和 D——由文件系统内容填充。
根据用户选择的选项,我想用特定于选项的内容填充侧边栏的其余部分。例如,如果用户选择“A”,那么侧边栏将包含一个额外的selectInput 和dateRangeInput。
为了保持代码简洁,我将所有“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,但我使用
observe和updateCheckboxInput解决了这个问题。
标签: r shiny shiny-server