【发布时间】:2016-06-19 17:15:52
【问题描述】:
我想知道是否有技巧可以防止用户在 Shiny 中使用 dateRangeInput 将结束日期设置在开始日期之前(比如第一个日期是“01-01-2016”,第二个日期不能低于那个)。
我尝试每次都重新定义最小值和最大值,但后来我卡住了,无法将最小值恢复到原来的值。
【问题讨论】:
我想知道是否有技巧可以防止用户在 Shiny 中使用 dateRangeInput 将结束日期设置在开始日期之前(比如第一个日期是“01-01-2016”,第二个日期不能低于那个)。
我尝试每次都重新定义最小值和最大值,但后来我卡住了,无法将最小值恢复到原来的值。
【问题讨论】:
这是一个例子。基本上它会观察开始日期的变化,然后动态更新dateRangeInput 对象。如果之前选择的结束日期早于新的开始日期,则更新结束日期。最短可能日期也会更新,因此用户无法选择早于开始日期的结束日期。
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Dynamically change dateRangeInput"),
sidebarLayout(
sidebarPanel(
dateRangeInput("date_range", "Range of dates")
),
mainPanel(
textOutput("text")
)
)
))
server <- shinyServer(function(input, output, session) {
# Update the dateRangeInput if start date changes
observeEvent(input$date_range[1], {
end_date = input$date_range[2]
# If end date is earlier than start date, update the end date to be the same as the new start date
if (input$date_range[2] < input$date_range[1]) {
end_date = input$date_range[1]
}
updateDateRangeInput(session,"date_range", start=input$date_range[1], end=end_date, min=input$date_range[1] )
})
output$text <- renderText({
validate(
need(input$date_range[2] >= input$date_range[1], "End date cannot be earlier than start date!")
)
input$date_range[2] >= input$date_range[1]
})
})
shinyApp(ui = ui, server = server)
【讨论】: