R语言用for循环加载指定多文件夹文件并存储为命名嵌套列表求助
核心问题点
- 存储逻辑错误:原代码中
data_sets=append(list(data_sets), dat)每次会将已生成的整个列表打包为新元素追加,导致内容重复嵌套,没有实现分层存储的需求 - 未设置层级标识:没有给外层列表按子文件夹命名,也没有对不同文件夹下的文件做分组,无法追溯数据来源
- 路径操作风险:频繁切换工作目录容易出现路径匹配错误,稳定性差
修正后代码
# 加载依赖(原代码用到read_delim,需要提前加载tidyverse/readr) library(readr) # 原变量定义保留 TFs=unique(TF_hyper_baseline$collection) trans_factor=levels(as.factor(TFs)) # 定义主文件夹根路径,无需频繁切换工作目录 main_dir <- "D:/Papers to work on/Methylation Meta-Analyses/New analyses - VO2max and aerobic only/UniBind_baseline_hyper/damo_hg38_TFBS_per_TF" # 初始化外层结果列表 data_sets <- list() # 遍历目标子文件夹 for (t in seq_along(trans_factor)) { # 当前子文件夹名 cur_folder <- trans_factor[[t]] # 匹配当前子文件夹下所有.bed后缀文件,返回完整路径 bed_files <- list.files( path = file.path(main_dir, cur_folder), pattern = "\\.bed$", full.names = TRUE ) # 初始化当前子文件夹的内层列表 cur_file_list <- list() # 遍历当前文件夹下的bed文件 for (f in seq_along(bed_files)) { cur_file_list[[f]] <- read_delim(bed_files[[f]], col_names = FALSE) } # 将内层列表赋值给外层列表对应命名位置 data_sets[[cur_folder]] <- cur_file_list }
效果说明
生成的data_sets为双层嵌套列表,完全匹配需求结构:
- 第一层为目标子文件夹名,可通过
names(data_sets)查看所有已加载的子文件夹 - 第二层为对应子文件夹下所有bed文件的读取结果,调用格式为
data_sets[["Folder1"]][[1]]
内容的提问来源于stack exchange,提问作者MacsueJacques
相关产品推荐
相关产品推荐

