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

