【问题标题】:Error in filter statement - Shiny Application过滤器语句中的错误 - 闪亮的应用程序
【发布时间】:2018-11-20 04:11:26
【问题描述】:

我在我的 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.).

我在这里做错了什么?

【问题讨论】:

  • else if 应该在右括号后的同一行开始,即:if(){}else if(){}else if....

标签: r shiny


【解决方案1】:

好的,我明白了。当我在反应式表达式或观察者中执行反应式时,它会起作用。谢谢大家的帮助。

我是这样做的:

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

【讨论】:

    【解决方案2】:

    您必须在反应式函数中使用date_input,但如有必要,您可以使用isolate() 在外部获取价值。

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

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

    链接:

    【讨论】:

    • 谢谢phili_b。是的,它在反应函数之外。我还不太确定我需要在这里适应什么。我是否理解正确,我首先必须隔离查询并且它仅在用户交互期间使用。
    • 是的,就是这样 :) “我首先必须隔离查询,并且它只在用户交互期间使用”
    • 好的,我该如何使用它?使用围绕数据查询的反应功能?我以前从未使用过隔离。抱歉问:)
    • 我犯了一个错误你必须不隔离查询并且它只在用户交互期间使用,除非有特殊需要 isolate() 仅用于特定目的.
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2018-05-24
    • 2018-06-11
    • 2016-05-23
    相关资源
    最近更新 更多