通过函数过滤数据

时间:2019-01-06 20:50:02

标签: r filter shiny

我使用从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”似乎再次未被过滤。

我应该将过滤后的数据放在一个新的数据框中吗?

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

Thx

1 个答案:

答案 0 :(得分:0)

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

当您编写“另一个函数”时,您可能还意味着在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