闪亮的dateRange输入 - 设置范围的约束

时间:2017-05-10 06:59:57

标签: r shiny shiny-server

关于dateRangeInput的问题。

我知道min / maxstart / end参数。

我需要对给定的范围施加约束,即。关于差异end - start。具体来说,我为用户提供了计算滚动平均值的可能性,并且需要确保startend之间至少有6个月的时间。

我怎么能实现这个目标?

(有一种方法可以让输入相互依赖(请参阅this question的答案)。但是,我们希望datarangeInput[1]依赖于daterangeInput[2] ......但这些两个并不完全分开。)

编辑:下面的评论几乎回答了最初措辞的问题(见下文)。但是,为了使代码完全令人满意,如何确保服务器更正输入范围之前,依赖于该输入范围的其他计算本身已开始?使用我现有的解决方案(见下文) ),观察者将过晚纠正该值:根据当时已经开始的错误范围计算

1 个答案:

答案 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)