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

R Shiny批量导入合并CSV文件后绘图失败问题排查

问题定位

代码存在4处逻辑/格式错误,导致数据无法正常合并、绘图失效:

  • 文件读取逻辑错误:开启多文件上传时,fileInput返回的input$file$datapath是所有上传CSV的临时路径向量,不是文件夹路径。原代码将其作为文件夹路径传入list.files(),根本无法获取有效文件地址,读不到任何数据。
  • 监听触发逻辑错误:仅监听input$file$datapath在多文件上传场景下会出现触发时机异常,导致数据读取不完整。
  • 绘图无空值防护:App启动初始阶段vars$df为NULL,renderPlot直接执行数据索引会触发报错,绘图无法正常渲染。
  • 依赖缺失+格式错误:代码使用了%>%管道符,但未加载提供该函数的dplyr/magrittr包;同时代码中赋值符号<-被转义为&lt;-,直接运行会报语法错误。
修正后可运行代码
library(shinydashboard)
library(ggplot2)
library(data.table)
# 加载缺失的管道符依赖包
library(dplyr)

#======================================================================
# UI
#======================================================================

ui = dashboardPage(
  dashboardHeader(
    title = 'Test_multiple csv import and plot'
  ),
  dashboardSidebar(
    sidebarMenu(
      menuItem('Load log files',tabName = 'data_tab'),
      menuItem('Plot log files',tabName = 'plot_tab')
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(
        tabName = 'data_tab',
        fileInput('file','Data Loading(*.csv files)',multiple=T, accept = c('.csv'))
      ),
      tabItem(
        tabName = 'plot_tab',
        plotOutput('plot')
      )
    )
  )
)

#======================================================================
# Server
#======================================================================

server = function(input,output){
  
  vars = reactiveValues(df = NULL)
  # 监听完整的file输入对象,适配多文件上传的触发逻辑
  observeEvent(input$file,{
    req(input$file)
    # 直接遍历datapath中的临时文件路径读取CSV,删除错误的list.files调用
    temp = lapply(input$file$datapath, fread)
    df = rbindlist(temp)
    vars$df <- as.data.frame(df)
  })
  
  output$plot = renderPlot({
    # 增加非空校验,数据未加载完成时不执行绘图
    req(vars$df)
    data.frame(time=vars$df[,1],emission=vars$df[,2]) %>%
      ggplot(aes(x=time, y=emission))+
      geom_line(color="red")+
      geom_point()
  })
  
}

#======================================================================
# Run App
#======================================================================

shinyApp(ui,server)
关键修正点说明
  • 将数据读取的监听触发对象从input$file$datapath改为input$file,保证多文件上传时能完整读取所有上传文件
  • 移除错误的list.files()调用,直接读取input$file$datapath存储的每个CSV临时路径
  • 绘图逻辑增加req(vars$df)空值校验,避免App初始状态下空数据报错
  • 补充dplyr包加载,修复管道符函数不存在的问题
  • 修正转义错误的赋值符号,保证代码语法正确

你提供的CSV格式和代码的列索引逻辑匹配,修正后即可正常完成多文件合并、折线图渲染。

内容的提问来源于stack exchange,提问作者mukimuki mms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:57:16