我使用从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
答案 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。