R Studio读取合并多个sbir_award系列Excel文件结果为空求助
核心错误点
你的代码存在三个直接导致读取失败的问题:
- 文件匹配逻辑错误:
list.files()的pattern参数仅用于匹配文件名,不能把目录路径写在pattern里;同时你写的匹配规则sbir_award_.xlsx没有适配文件名里的数字后缀(1、2...),完全匹配不到你的目标文件,返回的文件列表本身就是空值。 - 对象名不统一:你把
list.files()的返回值赋值给了sbir对象,后续lapply调用时却用了从未定义的file.list,代码运行会直接触发对象不存在的报错。 - 读取函数调用错误:你加载的是
readxl包,但代码里写的read.xlsx是openxlsx包的函数,未加载对应包的情况下函数无法正常运行。
修正后可直接运行的代码
library(tidyverse) library(readxl) # 第一步:正确获取所有目标文件的完整路径 file_list <- list.files( path = "data/raw/sbir", pattern = "^sbir_award_.*\\.xlsx$", # 匹配所有sbir_award_开头的xlsx文件,适配数字后缀 full.names = TRUE # 必须开启,返回完整路径,否则读取函数找不到文件位置 ) # 第二步:批量读取并直接按行合并为一个数据集 sbir_total <- map_dfr( .x = file_list, .f = ~read_excel(.x) )
异常排查方案
如果运行上述代码仍无法正常生成数据集,按以下顺序排查:
- 单独运行
print(file_list),如果输出结果为character(0),说明路径配置错误或文件名匹配规则不对,手动核对目标文件夹下的文件后缀是不是.xlsx、有没有文件名拼写错误。 - 如果文件列表输出正常,但读取时报错,可在
read_excel中添加参数col_types = "text",先将所有列按文本格式读入,避免不同子文件同列数据格式不一致导致的读入失败、列错位问题,合并完成后再单独转换列类型即可。 - 不要混用不同包的Excel读取函数,
read_excel(来自readxl)和read.xlsx(来自openxlsx)的参数逻辑、默认读入格式存在差异,统一使用你已经加载的readxl包内函数即可。
内容的提问来源于stack exchange,提问作者econ_grad12345
相关产品推荐
相关产品推荐

