更新readr包后使用read_csv批量合并CSV文件报错如何解决
问题描述
更新包含readr在内的全部R包后,需要将指定文件夹下格式统一的多个.csv文件合并导入R环境,初始实现代码如下:
df <- list.files(path = "file path here", # 识别所有CSV文件 pattern = "*.csv", full.names = TRUE) %>% lapply(read_csv) %>% bind_rows
运行代码后返回报错与警告:
Error in app$vspace(new_style$`margin-top` %||% 0) : attempt to apply non-function In addition: Warning message: One or more parsing issues, see `problems()` for details
尝试重装R、重新加载所有包后问题仍存在。
解决方案
修复核心报错
app$vspace相关报错和R本身安装、代码业务逻辑无关,属于tidyverse生态包版本不兼容问题,大多是更新readr时没有同步更新其依赖的cli、pillar包,导致readr触发解析问题提示时格式渲染失败,完全不需要重装R。
- 先运行命令更新所有已安装包的匹配版本:
update.packages(ask = FALSE, checkBuilt = TRUE)
- 如果更新后仍报错,单独重装核心依赖包即可解决:
install.packages(c("cli", "pillar"))
修正代码匹配规则
原代码的文件匹配规则存在漏洞:list.files的pattern参数支持正则表达式语法,原写法"*.csv"是系统文件通配符写法,不符合正则规则,可能匹配到文件名带.csv但实际不是csv格式的非目标文件。替换为正则写法即可精准匹配.csv后缀文件:
pattern = "\\.csv$"
处理解析警告
One or more parsing issues警告是readr自动识别列类型时,不同csv文件的同名列识别类型不一致、或列内存在不符合预期类型的值导致的,可按以下步骤排查:
- 先单独读取所有文件存为列表,不直接合并
- 调用
problems()查看具体解析错误的位置、原因 - 如果确认所有csv文件格式完全统一,可在
read_csv中手动指定列类型规则,避免自动识别偏差
对应排查代码:
# 提取所有目标csv文件路径 csv_paths <- list.files( path = "替换为你的实际文件夹路径", pattern = "\\.csv$", full.names = TRUE ) # 读取为列表对象 csv_list <- lapply(csv_paths, read_csv) # 查看具体解析问题详情 problems(csv_list)
修复后可直接运行的完整代码
library(tidyverse) df <- list.files( path = "替换为你的实际文件夹路径", pattern = "\\.csv$", full.names = TRUE ) %>% lapply(read_csv, show_col_types = FALSE) %>% bind_rows()
内容的提问来源于stack exchange,提问作者fishlakeslimno
相关产品推荐
相关产品推荐

