R 筛选器语句中出错-应用程序

R 筛选器语句中出错-应用程序,r,shiny,R,Shiny,我已经在我闪亮的应用程序中添加了一个日期过滤器。现在我想根据输入的日期动态过滤数据帧 我在ui.R中尝试了以下方法: fluidPage( selectInput( "analysis_period", "analysie period:", c( "Last Year" = "LY", "Past 90 days" = "ND", "Past 30 days" = "TD",

我已经在我闪亮的应用程序中添加了一个日期过滤器。现在我想根据输入的日期动态过滤数据帧

我在ui.R中尝试了以下方法:

fluidPage(
      selectInput(
        "analysis_period",
        "analysie period:",
        c(
          "Last Year" = "LY",
          "Past 90 days" = "ND",
          "Past 30 days" = "TD",
          "Last Week" = "LW"
        )
      )
     )
在我的服务器部分,我有:

date_input <- reactive({
if (input$analysis_period== "NT") {
  as.Date(Sys.time()) - 90
}

else if (input$analysis_periodm == "DT") {
  as.Date(Sys.time()) - 30
}

else if (input$analysis_periodum == "LW") {
  as.Date(Sys.time()) - 7
}

else if (input$analysis_period == "LY") {
  m = as.POSIXlt(as.Date(Sys.time()))
  m$year = m$year - 1
  m
}
})

我做错了什么?

您必须在反应式函数中使用
date\u input
,但如果需要,您可以使用
isolate()
从外部获取值

但它的反应函数的目标是至少使用
isolate()

我不知道你的
data2=data[,c('A','B','c')]
是否在反应函数之外

链接:


    • 好的,我知道了。当我在一个反应式表达式或观察器中执行反应式时,它会工作。谢谢你们的帮助

      我是这样做的:

        output$x1 <- DT::renderDataTable({
      df <- data2
      df<- filter(df, df$date >= dateinput())
      df
      })
      

      输出$x1
      else if
      应该在结束括号后的同一行开始,即:
      if(){}else if(){}else if….
      谢谢phili_b。是的,它在反应功能之外。我还不确定我需要适应什么。我是否正确理解我首先必须隔离查询,并且它仅在用户交互期间使用。是的,它是:)“我首先必须隔离查询,并且它仅在用户交互期间使用”好的,我如何使用它?在数据查询中使用反应式功能?我以前从未使用过隔离。很抱歉问:)我犯了一个错误,您没有隔离查询,并且它仅在用户交互期间使用,除非特殊需要
      isolate()
      仅用于特定目的。
      Error in filter_impl(.data, quo) : 
      Evaluation error: Operation not allowed without an active reactive context. 
      (You tried to do something that can only be done from inside a reactive 
      expression or observer.).
      
        output$x1 <- DT::renderDataTable({
      df <- data2
      df<- filter(df, df$date >= dateinput())
      df
      })