筛选器语句中的错误-闪亮的应用程序

时间:2018-11-19 10:20:51

标签: r shiny

我已经在我的Shiny App中添加了日期过滤器。现在,我想根据输入的日期动态过滤数据框。

我在 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
}
})

然后我要加载数据帧并使用过滤器对其进行过滤:

data2 = data[, c('A', 'B', 'C')]
data2 <- filter(data2, date_input())

但是当我启动应用程序时,我总是会收到错误消息:

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.).

我在这里做什么错了?

2 个答案:

答案 0 :(得分:1)

好吧,我明白了。当我在反应式表达式或观察者内部执行反应式时,它可以工作。谢谢大家的帮助。

我是这样做的:

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

答案 1 :(得分:0)

您必须在反应函数中使用date_input,但是如果需要,您可以使用isolate()来获得外部价值。

但是Shiny中的反应函数的目标是最少使用isolate()

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

链接: