【问题标题】:filtered data over functions通过函数过滤数据
【发布时间】:2019-01-06 20:50:02
【问题描述】:

我使用从 mysql 表中获取的数据集(lst)。

基于 datrangeinput 我应用过滤器

dateRangeInput("daterange", "Date Range", start = min(lst$Record_Date), end = max(lst$Record_Date))


observeEvent(input$daterange, {
  st <- input$daterange[1]
  ed <- input$daterange[2]

  lst  <- lst %>%
    filter(Record_Date >= st &
           Record_Date <= ed)

}) 

当我在其他函数中使用过滤后的“lst”时,“lst”似乎再次未过滤。

我应该将过滤后的数据子集到一个新的数据框中吗?

我实际上是想避免这种情况以减少内存使用。

谢谢

【问题讨论】:

  • 使用反应值而不是观察事件

标签: r filter shiny


【解决方案1】:

您可能有兴趣仔细研究闪亮应用的范围规则和环境。

当您编写“另一个函数”时,您可能还指在 observeEvent() 函数之外。然后,它是另一个环境,您必须将数据传递到另一个环境。

你的例子:

 # inital data
 lst <- ...

filteredLst <- reactive(
  input$daterange
  isolate({
    st <- input$daterange[1]
    ed <- input$daterange[2]

    lst  <- lst %>%
      filter(Record_Date >= st &
            Record_Date <= ed)
    lst
  })
})

observe({
  lst # old data
  lst <- filteredLst() # filtered data in new environment
})

有关在环境和反应性之间传递数据的详细信息:

https://shiny.rstudio.com/articles/reactivity-overview.html

有关范围界定的详细信息:

“您定义对象的位置将决定对象的可见位置。”

详细解释可以在这里找到:https://shiny.rstudio.com/articles/scoping.html

【讨论】:

  • 关于范围,我有一个大的 mysql 表,我在 global.R 中加载。我了解此数据集可用于所有会话。 mysql 表每小时刷新一次。有没有办法可以每小时刷新 global.R 中的表格,使更新的数据集在 server.R 中可用?
  • sry 没有看到评论。你可以使用shiny.rstudio.com/reference/shiny/0.14/invalidateLater.html。例如invalidateLater(3600*1000)。一个upvote将不胜感激,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 2022-11-15
相关资源
最近更新 更多