我使用从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”似乎再次未经过滤。
我应该在新的数据帧中对过滤后的数据进行子集化吗?
我实际上是试图避免这种情况来减少内存使用。
谢谢
您可能有兴趣仔细研究有光泽的应用程序的范围规则和环境。
当你写“另一个函数”时,你可能也意味着在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。