使用readRDS从多文件夹导入多RDS文件遇空列表问题排查
问题诊断与修复方案
你的代码返回空列表主要有以下几个核心问题,按优先级排查修复:
1. 文件夹路径引用错误
你在定义folder_paths时,把变量名用引号包裹,导致R将其识别为普通字符串"path_to_cases"和"path_to_controls",而非你之前定义的实际路径变量。这是最可能导致空列表的原因:
# 错误写法 folder_paths <- c("path_to_cases", "path_to_controls") # 正确写法 folder_paths <- c(path_to_cases, path_to_controls)
2. 文件匹配模式不精准
检查list.files的pattern是否完全匹配你的RDS文件名:
- 确认文件名是否真的以
SEJOUR_BARIA开头、以.RDS结尾(R正则默认区分大小写,若文件是小写.rds,需改为SEJOUR_BARIA.*\\.rds$) - 可以单独运行
list.files(path_to_cases, pattern = "SEJOUR_BARIA.*\\.RDS$", full.names = TRUE),查看是否返回有效文件路径列表。如果返回空,说明模式不匹配或文件夹内无对应文件。
3. 指定变量不存在于数据集
若文件能正常读取,但目标变量myvar不存在,select(all_of(variable_to_select))会返回空数据框。可以单独读取一个文件验证:
test_file <- list.files(path_to_cases, pattern = "SEJOUR_BARIA.*\\.RDS$", full.names = TRUE)[1] test_data <- readRDS(test_file) colnames(test_data) # 查看所有变量名,确认myvar是否存在
修复后的完整代码
path_to_cases <- "1_GROUPE BARIA/..../..../CLEAN DATASETS" path_to_controls <- "2_GROUPE CONTROLE/..../..../CLEAN DATASETS" # 引用实际路径变量,去掉引号 folder_paths <- c(path_to_cases, path_to_controls) variable_to_select <- "myvar" data_list <- map(folder_paths, function(folder_path) { file_paths <- list.files(folder_path, pattern = "SEJOUR_BARIA.*\\.RDS$", full.names = TRUE) # 添加警告提示,方便排查空文件列表问题 if(length(file_paths) == 0) { warning(paste("未找到匹配文件:", folder_path)) return(NULL) } map(file_paths, ~ readRDS(.) %>% select(all_of(variable_to_select))) })
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

