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

如何通过dir.create批量保存文件?解决路径无效报错问题

问题修复:批量创建层级文件夹并保存R数据框报错处理

问题描述

我有两个数据框hp_cons_x和aux,需要按.../rgn11cd/lad21cd/msoa11cd.rdata的层级结构批量保存文件,其中rgn11cd和lad21cd是要创建的嵌套文件夹。编写的代码如下:

aux = hp_cons_x %>%
  select(rgn11cd, lad21cd, msoa11cd) %>%
  distinct() %>%
  drop_na()

for(i in 1:nrow(aux)){
 
  dir.create(paste0("01 Raw Data/EPC/processed_buckets/test/", aux[i]$rgn11cd,aux[i]$lad21cd))
  
  save(hp_cons_x, file = paste0("01 Raw Data/EPC/processed_buckets/test/",aux[i]$rgn11cd, aux[i]$lad21cd, aux[i]$msoa11cd, ".rdata"))
  
}

运行后报错:

Error in dir.create(paste0("01 Raw Data/EPC/processed_buckets/test/",  : 
  invalid 'path' argument

错误原因与修复方案

报错核心是路径格式错误和无法创建嵌套文件夹,具体修复点如下:

  • 路径拼接缺少分隔符:原代码把rgn11cd和lad21cd直接拼接,生成类似E09E09000001的无效文件夹名,正确层级路径需要用/分隔各层级。
  • 无法创建嵌套文件夹:dir.create默认不支持多层嵌套创建,需添加recursive = TRUE参数。
  • 重复创建文件夹:循环会重复创建相同的rgn11cd/lad21cd文件夹,可先对aux按这两个字段去重,一次性创建所有需要的文件夹。
  • 保存文件路径错误:原保存路径未在lad21cd后加分隔符,导致文件名包含文件夹名称,需修正为正确层级路径。
  • 额外优化:原代码保存整个hp_cons_x,实际应保存当前msoa11cd对应的子集,避免文件冗余。

修正后的代码

基础循环版本

library(dplyr)

# 预处理aux,确保无缺失值且去重
aux = hp_cons_x %>%
  select(rgn11cd, lad21cd, msoa11cd) %>%
  distinct() %>%
  drop_na()

# 先创建所有需要的嵌套文件夹(按rgn11cd+lad21cd去重,避免重复创建)
folder_paths = aux %>%
  distinct(rgn11cd, lad21cd) %>%
  mutate(folder = paste0("01 Raw Data/EPC/processed_buckets/test/", rgn11cd, "/", lad21cd)) %>%
  pull(folder)

# 批量创建文件夹,recursive=TRUE允许创建多层嵌套
walk(folder_paths, ~dir.create(.x, recursive = TRUE, showWarnings = FALSE))

# 循环保存每个msoa对应的数据集子集
for(i in 1:nrow(aux)){
  # 筛选当前msoa11cd的数据
  current_data = hp_cons_x %>% filter(msoa11cd == aux[i]$msoa11cd)
  
  # 构建保存路径
  save_path = paste0("01 Raw Data/EPC/processed_buckets/test/",
                     aux[i]$rgn11cd, "/",
                     aux[i]$lad21cd, "/",
                     aux[i]$msoa11cd, ".rdata")
  
  # 保存数据
  save(current_data, file = save_path)
}

purrr简洁版本

library(dplyr)
library(purrr)
library(stringr)

aux = hp_cons_x %>%
  select(rgn11cd, lad21cd, msoa11cd) %>%
  distinct() %>%
  drop_na()

# 创建所有嵌套文件夹
aux %>%
  distinct(rgn11cd, lad21cd) %>%
  mutate(path = str_glue("01 Raw Data/EPC/processed_buckets/test/{rgn11cd}/{lad21cd}")) %>%
  pull(path) %>%
  walk(~dir.create(.x, recursive = TRUE, showWarnings = FALSE))

# 批量保存数据
aux %>%
  pwalk(function(rgn11cd, lad21cd, msoa11cd) {
    data_subset = hp_cons_x %>% filter(msoa11cd == !!msoa11cd)
    save_path = str_glue("01 Raw Data/EPC/processed_buckets/test/{rgn11cd}/{lad21cd}/{msoa11cd}.rdata")
    save(data_subset, file = save_path)
  })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:25:39