如何在Shiny中检测日期的空白输入

时间:2017-07-12 14:02:34

标签: r date shiny

我的R Shiny应用程序中有一系列输入,我将其用作函数的参数,以从数据框中选择特定数据。输入是dateInput:

dateInput("dateSelect", "Date", format = "yyyy-mm-dd", value = NA)

在我的函数中,我需要指定dateSelect是否为空或未选中,以便能够选择所有日期。查看一个正常工作的示例,它不是日期,还有一个简单的selectInput:

selectInput("teamSelect", "Team", choices = c("All", levels(newEffortstable$team)))

在该功能中,这可以选择“所有球队”:

    if(!missing(teamSelect)){
    if(teamSelect!="All"){
    selections[["teamEfforts"]] = 
    newEffortstable$effortNo[which(newEffortstable$team %in% teamSelect)]
    }else{
    selections[["teamEfforts"]] = newEffortstable$effortNo
    }
    }

我已尝试使用NANULL以及" "进行以下操作,并在以下情况下继续获取错误:参数长度为零'

    if(!missing(dateSelect)){
    if(!dateSelect== "NA"){
    selections[["dateEfforts"]] = 
    newEffortstable$effortNo[which(newEffortstable$date == dateSelect)]
    }else{
    selections[["dateEfforts"]] = newEffortstable$effortNo
    }
    }

谢谢!

1 个答案:

答案 0 :(得分:4)

您还没有尝试过一个选项:检查长度。如果没有给出日期,dateInput会返回一个空的Date向量,如下例所示。

所以你可以检查if(length(input$dateSelect) == 0),但这不是最坚固的闪亮选项。为了避免您必须检查所有可能性(即NULLNA""numeric(0)等),您可以使用函数isTruthy()作为在下面的例子中:

shinyApp(
  ui = fluidPage(
    dateInput("dateSelect","Date"),
    verbatimTextOutput("out"),
    textOutput("text")
  ),
  server = function(input,output,session){

    output$text <- renderText({
      if(!isTruthy(input$dateSelect)){
        "NO DATE"
      } else {
        paste("The chosen date is:",input$dateSelect)
      }
    })
    output$out<- renderPrint({str(input$dateSelect)})
  }
)