我已经在我的Shiny App中添加了日期过滤器。现在,我想根据输入的日期动态过滤数据框。
我在 ui.R
中尝试了以下操作:
fluidPage(
selectInput(
"analysis_period",
"analysie period:",
c(
"Last Year" = "LY",
"Past 90 days" = "ND",
"Past 30 days" = "TD",
"Last Week" = "LW"
)
)
)
在我的服务器部分,我有:
date_input <- reactive({
if (input$analysis_period== "NT") {
as.Date(Sys.time()) - 90
}
else if (input$analysis_periodm == "DT") {
as.Date(Sys.time()) - 30
}
else if (input$analysis_periodum == "LW") {
as.Date(Sys.time()) - 7
}
else if (input$analysis_period == "LY") {
m = as.POSIXlt(as.Date(Sys.time()))
m$year = m$year - 1
m
}
})
然后我要加载数据帧并使用过滤器对其进行过滤:
data2 = data[, c('A', 'B', 'C')]
data2 <- filter(data2, date_input())
但是当我启动应用程序时,我总是会收到错误消息:
Error in filter_impl(.data, quo) : Evaluation error: Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.).
我在这里做什么错了?
答案 0 :(得分:1)
好吧,我明白了。当我在反应式表达式或观察者内部执行反应式时,它可以工作。谢谢大家的帮助。
我是这样做的:
output$x1 <- DT::renderDataTable({
df <- data2
df<- filter(df, df$date >= dateinput())
df
})
答案 1 :(得分:0)
您必须在反应函数中使用date_input
,但是如果需要,您可以使用isolate()
来获得外部价值。
但是Shiny中的反应函数的目标是最少使用isolate()
。
我不知道您的data2 = data[, c('A', 'B', 'C')]
是否在反应函数之外。
链接: