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

使用map_dfr与read_delim时如何指定col_type?

解决多TXT文件合并时的类型不匹配与参数传递错误

错误原因分析

  1. 类型不匹配报错:不同文件中BUSINESS_UNIT列被自动识别为不同类型(部分为double、部分为character),合并时类型冲突。
  2. argument "file" missing错误:直接在map_dfr中调用read_delim(col_types = ...)时,没有传入必需的file参数,read_delim会立即执行而非作为函数传递给map_dfr。
  3. 无法转换对象为函数的错误:错误地传递(.)参数,导致给map_dfr的是read_delim执行后的结果(数据框),而非函数本身。

正确解决方案

方法1:使用匿名函数

通过匿名函数明确传递文件路径给read_delim,同时指定列类型:

read_files <- fs::dir_ls(folder_path) %>% 
  purrr::map_dfr(function(file) {
    read_delim(file, col_types = list(BUSINESS_UNIT = col_character()))
  }, .id = "source")

方法2:使用purrr公式语法(更简洁)

用~定义匿名函数,.x代表dir_ls返回的每个文件路径:

read_files <- fs::dir_ls(folder_path) %>% 
  purrr::map_dfr(~ read_delim(.x, col_types = list(BUSINESS_UNIT = col_character())), .id = "source")

扩展:指定多列类型

如果需要统一更多列的类型,推荐用cols()函数明确定义所有列类型,避免遗漏:

read_files <- fs::dir_ls(folder_path) %>% 
  purrr::map_dfr(~ read_delim(.x, col_types = cols(
    BUSINESS_UNIT = col_character(),
    ORDER_ID = col_double(),
    CREATE_DATE = col_date(format = "%Y-%m-%d")
  )), .id = "source")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:48:23