R Shiny仪表盘报错求助:数据需为数据框而非逻辑向量
解决R Shiny仪表盘的
data must be a data frame...错误 嘿,我一眼就揪出问题所在了——你的管道操作里括号位置搞混了,导致ggplot拿到的不是过滤后的数据集,而是个逻辑向量,这才触发了这个报错。
错误原因分析
你在renderPlot里的代码把ggplot调用嵌套进了filter()的括号里:
KPI1_shiny %>% filter(between(Ordermaand, v$Begin, v$Eind) %>% ggplot(...) )
这相当于让filter()去处理ggplot()的返回值,而不是先过滤数据再传给ggplot。结果filter()最终返回的是一个逻辑向量,可ggplot需要的是标准数据框,自然就抛出错误了。
修正后的代码
只需要把filter()的括号在between()后面闭合,让管道正确传递过滤后的数据集给ggplot就行。我还帮你补上了绘图图层(不然就算括号改对了也看不到图形),修正后的server部分代码如下:
server <- function(input, output) { v <- reactiveValues(value = NULL) observe({ v$Begin <- make_date(input$Beginjaar, input$Beginmaand) v$Eind <- make_date(input$Eindjaar, input$Eindmaand) }) output$iPlot1 <- renderPlot({ KPI1_shiny %>% filter(between(Ordermaand, v$Begin, v$Eind)) %>% # 在这里闭合filter的括号,完成数据过滤 ggplot(aes(x = Ordermaand, y = AantalProducten, group = 1)) + geom_line(color = "#2c3e50", linewidth = 1) + # 添加折线图层,让图形显示出来 labs(x = "订单月份", y = "产品数量", title = "指定时间段产品销量趋势") + # 可选:添加标签让图表更清晰 theme_minimal() }) }
现在运行修正后的代码,就能正常显示符合你选择日期范围的产品数量趋势图了。
内容的提问来源于stack exchange,提问作者Bjorn Verdonk
相关产品推荐
相关产品推荐

