1

我一直在使用 R Shiny,但遇到了一些问题。我想为日期范围输入创建一个用户流,其中:

  1. 如果用户在结束日期之后输入开始日期,则结束日期自动跟随并模仿开始日期。

  2. 如果用户在开始日期之前输入结束日期,则开始日期自动跟随并模仿结束日期。

我想尝试使用一个observeEvent()单独的输入,如下所示:

#inputId of dateRangeInput = dateRange

#start date
observeEvent(input$dateRange[1], {
   - logic - 
})

#end date
observeEvent(input$dateRange[2], {
   - logic - 
})

以上所有操作都是运行两个观察事件,无论我是否更改了开始日期或结束日期的输入,所以我知道我的逻辑或对函数的理解在这里可能存在缺陷。

有没有办法做类似于我试图完成的事情,或者我应该尝试不同的方法?

提前感谢您的宝贵时间!

4

1 回答 1

0

感谢大家的意见。我现在意识到我本可以提出一个更好、可重现的例子来帮助你们更好地了解我的问题,对此我深表歉意——我会在以后的帖子中记住这一点(向@MrFlick 大声疾呼一篇关于制作的帖子!)

我最终考虑了@r2evans 的评论,并能够根据它提出一个解决方案!我对 Stackoverflow 还很陌生,所以不确定是否可以将评论标记为答案,但非常感谢@r2evans!

以下是我在服务器功能中使用的解决方案,以帮助我获得所需的功能:

curr_date <- shiny::reactiveValues(start=format(Sys.Date(),"%Y-%m-%d"), end=format(Sys.Date(), "%Y-%m-%d"))
  
shiny::observeEvent(input$reports_date_range, {
    
    dates <- input$reports_date_range
    
    # if start date changed 
    if (dates[1] != curr_date$start) {
      
      # if start date is after end date, have end date follow and update curr_date
      if(dates[1] > curr_date$end) {
        updateDateRangeInput(session, "reports_date_range", start = dates[1], end = dates[1])
        curr_date$start <- dates[1]
        curr_date$end <- dates[1]
      } else { # if start date is equal to or before end date, update curr_date$start
        curr_date$start <- dates[1]
      }
      
    } else if (dates[2] != curr_date$end) { # if end date changed
      
        # if end date is before start date, have start date follow end date
        if(dates[2] < curr_date$start) {
          updateDateRangeInput(session, "reports_date_range", start = dates[2], end = dates[2])
          curr_date$start <- dates[2]
          curr_date$end <- dates[2]
        } else { # if end date is equal to or after the start date, update curr_date$end
          curr_date$end <- dates[2]
        }
      
    }
  })

基本上,反应值curr_date保持输入在开始时默认的当前日期,并更新为每次更改输入时的值。

在服务器逻辑中,我检查用户输入的日期与我输入的历史值是否不匹配,以确定用户curr_date更改了两个日期(开始或结束)中的哪一个。然后,根据用户的操作应用正确的代码就很简单了!

再次感谢大家,让我知道你们是否可以发现任何改进此解决方案的方法,如果有任何发现我会更新!

于 2021-07-12T15:00:25.420 回答