You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:37:41