新版readr包read_delim函数读取同一文件输出结果不一致问题咨询
问题原因分析
该差异本质是readr包版本迭代带来的默认行为变更,和R 4.1.0本身没有直接关联,具体触发逻辑如下:
- 你之前使用的是1.x版本的readr,
read_delim对delim = " "有特殊兼容逻辑:会自动将连续多个空格视为单个分隔符,搭配trim_ws = TRUE就可以正确识别你的空格分隔文件,自动过滤列前多余空格、不会生成空列。 - R 4.1.0配套安装的通常是2.0及以上版本的readr,底层默认解析引擎切换为vroom,
delim = " "不再做特殊兼容:只会将单个空格识别为分隔符,你的文件里列之间的连续空格会被识别为多个分隔符,最终生成大量空列,和旧版结果不一致。注意trim_ws参数仅负责修剪单个单元格首尾的空格,不会修改分隔符的识别逻辑。
兼容修复方案
你可以任选以下任意一种方法实现跨版本的正确读取:
- 保留原有代码逻辑,指定沿用旧版解析引擎:
df_out <- read_delim("file.out", delim = " ", trim_ws = TRUE, col_types = "ccd", engine = "old")
- 改用适配多空白分隔的专用读取函数,更适合你的文件格式:
# read_table默认把连续空白作为单个分隔符,无需额外设置 df_out <- read_table("file.out", col_types = "ccd")
- 显式指定分隔符为任意长度的空白字符:
df_out <- read_delim("file.out", delim = "\\s+", trim_ws = TRUE, col_types = "ccd")
内容的提问来源于stack exchange,提问作者Prradep
相关产品推荐
相关产品推荐

