如何根据在RShiny中的DateInput中输入的值填充值

时间:2018-10-18 10:40:22

标签: r shiny

我目前正在开发Shiny App。在这里,当我从 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) )
    })
  }
)

有人可以帮我解决这个问题吗?在此先感谢!

2 个答案:

答案 0 :(得分:0)

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

$get_data = $_GET['data'];
if ( !empty($get_data)) {
  var_dump($get_data);

  echo "Name: " . $get_data["your-name"] . "<br>";  // Change "your-name"
}

这是使用updateDateInput的版本

由于需要实时跟踪这些输入值,因此需要使用observe而不是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"),
    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" )
    })
    })

)

答案 1 :(得分:0)

您只需要观察变化,所以

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