关于dateRangeInput
的问题。
我知道min
/ max
,start
/ end
参数。
我需要对给定的范围施加约束,即。关于差异end
- start
。具体来说,我为用户提供了计算滚动平均值的可能性,并且需要确保start
和end
之间至少有6个月的时间。
我怎么能实现这个目标?
(有一种方法可以让输入相互依赖(请参阅this question的答案)。但是,我们希望datarangeInput[1]
依赖于daterangeInput[2]
......但这些两个并不完全分开。)
编辑:下面的评论几乎回答了最初措辞的问题(见下文)。但是,为了使代码完全令人满意,如何确保服务器更正输入范围之前,依赖于该输入范围的其他计算本身已开始?使用我现有的解决方案(见下文) ),观察者将过晚纠正该值:根据当时已经开始的错误范围计算
答案 0 :(得分:3)
根据BigDataScientist和Mike Wise的评论,我改编this answer来解决问题。结果是一个服务器代码,用于确保daterangeInput
产生的范围超过给定值(此处为smallestWindow
)。
rm(list=ls())
library(shiny)
mindate <- "1980-01-01"
maxdate <- Sys.Date()
smallestWindow <- 18 * 31
from <- maxdate - smallestWindow
ui <- fluidPage(
mainPanel(uiOutput("slider"))
)
server <- function(input, output, session) {
observeEvent(input$timeperiod,{
if(input$timeperiod[1] > (input$timeperiod[2] - smallestWindow)){
updateDateRangeInput(session, "timeperiod", start=input$timeperiod[2] - smallestWindow)
}
})
output$slider <- renderUI({
dateRangeInput("timeperiod", "Time Period:"
, min=as.Date(mindate), max=maxdate
, start = from , end = maxdate)
})
}
shinyApp(ui, server)