过滤数据的功能

问题描述 投票:0回答:1

我使用从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”时,“last”似乎再次未经过滤。

我应该在新的数据帧中对过滤后的数据进行子集化吗?

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

谢谢

r filter shiny
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.