【问题标题】:How to populate value based on the value entered in DateInput in RShiny如何根据在 RShiny 中的 DateInput 中输入的值填充值
【发布时间】:2018-10-18 19:43:20
【问题描述】:

我目前正在开发一个闪亮的应用程序。在这里,当我从 selectizeInput() 中选择一个值并输入一个日期时,输入的日期应该填充到另一个 dataInput() 中。例如,如果我选择了“M”并输入了一个日期,那么在其他 dateInput() 中应该显示相同的日期。我尝试使用 observeEvent()。但它没有用。

这里是使用的代码:

shinyApp(
  ui = fluidPage(
    selectizeInput('role', 'Select the Role',
                   choices = c('VP','M','AC','C'),options = list(
                     placeholder = "Please select your Role",
                     onInitialize = I('function() { this.setValue(""); }'))),
    dateInput('cus', label ='Enter Current role start date',value = "",format = "mm/dd/yy"),
    dateInput('m', label ='Enter M date',value = "",format = "mm/dd/yy")

  ),
  server = function(input, output,session) {
    observeEvent(input$role == "M",{
      updateDateInput(session, "m", value = (input$cus) )
    })
  }
)

谁能帮我解决这个问题?提前致谢!!

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以使用 uiOutput,而不是使用 updateDateInput 函数。

       shinyApp(
       ui = fluidPage(
       selectizeInput('role', 'Select the Role',
                       choices = c('VP','M','AC','C'),options = list(
                         placeholder = "Please select your Role",
                         onInitialize = I('function() { this.setValue(""); }'))),
        dateInput('cus', label ='Enter Current role start date',value = "",format = "mm/dd/yy"),
        uiOutput('m')
      ),
      server = function(input, output,session) {
    
    
        output$m <- renderUI({
          value <- ""
          if(input$role == 'M') {
          value <- input$cus
          }  
          dateInput('m', label ='Enter M date',value = value,format = "mm/dd/yy" )
        })
        })
    
    )
    

    这是使用 updateDateInput 的版本

    您需要使用观察而不是观察事件,因为您需要实时跟踪这些输入值。

    shinyApp(
      ui = fluidPage(
        selectizeInput('role', 'Select the Role',
                       choices = c('VP','M','AC','C'),options = list(
                         placeholder = "Please select your Role",
                         onInitialize = I('function() { this.setValue(""); }'))),
        dateInput('cus', label ='Enter Current role start date',value = "",format = "mm/dd/yy"),
        dateInput('m', label ='Enter M date',value = "",format = "mm/dd/yy")
    
      ),
      server = function(input, output,session) {
        observe(
          if(input$role == 'M' & !is.null(input$role) & !is.null(input$cus)) {
          updateDateInput(session, "m", value = (input$cus) )
          }
        )
      }
    )
    

    【讨论】:

    • 是否可以使用 UpdateDateInput()?
    • observeEvent(input$role,{ if(input$role == "M"){ value = input$cus updateDateInput(session,"m",value = value) } }) 我尝试使用这个。但是还是不行!!
    【解决方案2】:

    你只需要改变观察,所以

    shinyApp(
      ui = fluidPage(
        selectizeInput('role', 'Select the Role',
                       choices = c('VP','M','AC','C'),options = list(
                         placeholder = "Please select your Role",
                         onInitialize = I('function() { this.setValue(""); }'))),
        dateInput('cus', label ='Enter Current role start date',value = "",format = "mm/dd/yy"),
        dateInput('m', label ='Enter M date',value = "",format = "mm/dd/yy")
    
      ),
      server = function(input, output,session) {
        observeEvent(c(input$cus, input$role), {
          if (input$role == "M")
            updateDateInput(session, "m", value = (input$cus))
        })
      }
    )
    

    如果在其他情况下需要清除第二个日期输入,可以添加else并将值更新为NA

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多