2017-05-10 6 views
0

질문에 대한 답변은 dateRangeInput입니다.빛나는 dateRange 입력 - 범위에 제약 조건을 설정하십시오

나는 min/max, start/end 매개 변수에 대해 알고 있습니다.

주어진 범위에 제약 조건을 넣어야합니다. 차이는 end - start입니다. 특히 나는 사용자에게 평균을 계산할 가능성을 부여하고 startend 사이에 적어도 6 개월이 있는지 확인해야합니다.

어떻게하면 좋을까요?

는 (입력이 서로 ( this question에 대한 답을 참조). 여기 그러나, 우리는 datarangeInput[1]daterangeInput[2]에 의존 할에 의존해야하는 방법이있다 ...하지만이 두 꽤 별도 없습니다.)

편집 : 아래의 의견을 꽤 많이 원래 문구 (아래 참조)로 질문에 대답. 그러나 코드가 완전히 만족 스럽다면 입력 범위에 의존하는 다른 계산이 시작되기 전에 입력 범위가 서버에 의해 수정되었는지 어떻게 확인할 수 있습니까? 내 기존 솔루션 (아래 참조)을 사용하면 관찰자가 이미 값을 수정합니다. 이미 해당 시간에 시작된 결함 범위를 기반으로 계산

+1

분명한 해결책은 서버의 값을 계산 한 다음 해당 값을 'renderUI'로 ui에 제어하는 ​​것입니다. 이 일을하지 않는 이유는 무엇입니까? 나는 또한 당신이 "롤링 평균"으로 무엇을 하려는지 이해하지 못합니다. 어디로 가는가? –

+1

여기를 참조하십시오 : http://stackoverflow.com/questions/43785070/make-upper-value-of-r-shiny-slider-range-always-be-higher-than-lower-value/43787513#43787513. 1m -> 6m – BigDataScientist

+0

Thx만큼 @MikeWise에서 솔루션을 업데이트 할 수 있습니다. 아래에 의견을 포착했으면합니다. 솔루션을 확장하면서 입력 범위에 의존하는 다른 계산이 시작되기 전에 입력 범위가 서버에 의해 어떻게 수정 될 수 있는지 어떻게 확인할 수 있습니까? 내 기존 솔루션 (아래 참조)을 사용하면 관찰자가 너무 늦게 값을 보정합니다. 즉, 그 시간까지 이미 시작된 오류 범위를 기반으로 한 계산입니다. – hartmut

답변

2

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) 
+0

좋은 것. 신용 해줘서 고마워. –