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

Emi*_*ily 5 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
    }
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下NANULL" "并不断收到“如果错误:参数长度为零”

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

谢谢!

Jor*_*eys 11

您还没有尝试过一种选择:检查长度。如果没有给出日期,则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)})
  }
)
Run Code Online (Sandbox Code Playgroud)