闪亮的日期范围输入 - 对范围设置约束
shiny dateRange input - set constraints on the range
关于dateRangeInput
的问题。
我知道 min
/max
、start
/end
参数。
我需要对给定的范围进行限制,即。关于差异 end
-start
。具体来说,我给用户一个计算滚动平均值的可能性,并且需要确保start
和end
之间至少有6个月。
请问我怎样才能做到这一点?
(有一种方法可以让输入相互依赖(参见 的回答)。然而,在这里,我们希望 datarangeInput[1]
依赖于 daterangeInput[2]
...但这两者并不是完全分开的。)
编辑:下面的评论几乎回答了最初措辞的问题(见下文)。然而,为了使代码完全令人满意,如何确保在依赖输入范围的其他计算本身开始之前服务器更正输入范围? 使用我现有的解决方案(见下文),观察者将纠正该值为时已晚:基于那个时候已经开始的错误范围的计算
根据 BigDataScientist 和 Mike Wise 的评论,我采用 来解决问题。结果是一个服务器代码,它确保 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)
关于dateRangeInput
的问题。
我知道 min
/max
、start
/end
参数。
我需要对给定的范围进行限制,即。关于差异 end
-start
。具体来说,我给用户一个计算滚动平均值的可能性,并且需要确保start
和end
之间至少有6个月。
请问我怎样才能做到这一点?
(有一种方法可以让输入相互依赖(参见 datarangeInput[1]
依赖于 daterangeInput[2]
...但这两者并不是完全分开的。)
编辑:下面的评论几乎回答了最初措辞的问题(见下文)。然而,为了使代码完全令人满意,如何确保在依赖输入范围的其他计算本身开始之前服务器更正输入范围? 使用我现有的解决方案(见下文),观察者将纠正该值为时已晚:基于那个时候已经开始的错误范围的计算
根据 BigDataScientist 和 Mike Wise 的评论,我采用 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)