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

R语言批量加载多个CSV文件 如何移除对象名称中的.csv后缀

错误原因定位

你修改后的代码触发No such file or directory报错,核心是三个逻辑错位:

  • 截取路径的长度计算完全错误:你对“基础目录路径+文件名”拼接的完整字符串做截取时,结束位置只算了原文件名的长度减4,完全没有把基础目录的长度纳入计算。举个例子:如果基础目录是/home/project/data/(长度19),待读文件是user.csv(长度8),按照你的截取逻辑,最终取到的字符串长度是8-4=4,也就是从拼好的完整路径里只截前4个字符/hom,根本不是有效文件路径,自然找不到目标。
  • 错把去后缀的操作用在了文件读取路径上:就算长度计算正确,你也不应该修改传给read.csv的文件路径——磁盘上存的文件名是带.csv后缀的,去掉后缀后的路径根本对应不上实际文件。
  • assign()的赋值名称没有同步修改:就算路径读取逻辑正常,你传给赋值函数的第一个参数还是带.csv的原文件名,最终生成的R对象依旧会带后缀,完全达不到你的需求。
可直接运行的实现方案

基础循环版(适配你的原有代码逻辑)

调整去后缀操作的位置,只修改赋值的对象名,不改动实际读取的文件路径,同时用file.path替代手动字符串拼接,避免路径分隔符导致的读取失败:

for (i in seq_along(file_list)) {
  # 拼接真实的文件完整路径(供read.csv读取,保留.csv后缀)
  real_file_path <- file.path(base_dir, file_list[i])
  # 去掉文件名末尾的.csv后缀,作为R环境中的对象名
  target_obj_name <- sub("\\.csv$", "", file_list[i])
  # 将读取到的数据赋值给无后缀的对象名
  assign(target_obj_name, read.csv(real_file_path), envir = .GlobalEnv)
}

这里用正则匹配替换去掉后缀,比手动按字符数截取更稳妥:如果后续碰到带多层后缀的文件,不会误截断文件名内容。

更高效的批量加载方案

相比往全局环境散落大量独立对象,更推荐把所有CSV读入一个命名列表中管理,后续批量做数据清洗、统计时不需要反复调用全局环境里的零散对象,代码可维护性更高:

# 生成和文件对应的无后缀名称
obj_names <- sub("\\.csv$", "", file_list)
# 批量读取所有CSV,绑定对应名称
csv_dataset_list <- setNames(
  lapply(file.path(base_dir, file_list), read.csv),
  obj_names
)

如果确实需要把列表中的对象单独释放到全局工作区,仅需一行代码即可完成:
list2env(csv_dataset_list, envir = .GlobalEnv)

注意事项
  • 读取含中文内容的CSV时,可以给read.csv()增加fileEncoding参数指定文件编码,避免出现乱码。
  • 用list.files()匹配CSV文件时,建议把正则规则写为pattern = "\\.csv$",避免匹配到文件名中间带.csv后缀的非目标文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 17:15:04