R语言遍历两级子目录无结果问题求助
两级目录遍历问题的解决方案
核心问题分析
- 路径引用错误:原代码中
list.files(path=dir, full.names=FALSE)返回的是一级文件夹的相对名称,而非完整路径。后续用files[f]作为list.files的路径参数时,R会在当前工作目录下查找该文件夹,而非你指定的dir目录,因此无法找到内容,导致listA为空。 - 冗余的
basename调用:list.files配合recursive=T会返回文件/子目录的完整路径,用basename截断后,后续路径无法被正确识别,进一步导致list_num为空。
修正后的嵌套循环写法
保留你原有的循环结构,修正路径问题:
dir <- "C:/Users/j/xyzDropbox/project1/HRData/Day1_20220905" # 获取一级文件夹的完整路径 level1_folders <- list.files(path=dir, full.names=TRUE) for (folder1 in level1_folders) { # 遍历一级文件夹 # 获取当前一级文件夹下的二级文件夹完整路径 level2_folders <- list.files(path=folder1, full.names=TRUE) for (folder2 in level2_folders) { # 遍历二级文件夹 # 获取二级文件夹下的所有文件完整路径 files_in_level2 <- list.files(path=folder2, full.names=TRUE) for (file_path in files_in_level2) { # 遍历每个文件 print(file_path) # 替换为你的具体任务(如读取、处理文件) } } }
更简洁的非循环写法
如果不需要单独处理每一级文件夹,可直接递归获取所有目标文件,避免嵌套循环:
dir <- "C:/Users/j/xyzDropbox/project1/HRData/Day1_20220905" # 递归获取目录下所有文件的完整路径 all_target_files <- list.files(path=dir, recursive=TRUE, full.names=TRUE) # 过滤出仅文件(排除子目录) all_target_files <- all_target_files[file.info(all_target_files)$isfile] # 遍历所有文件执行任务 for (file_path in all_target_files) { print(file_path) # 这里添加你的文件处理逻辑 }
关键改动说明
- 将
full.names=FALSE改为TRUE,确保获取完整路径,让R能准确定位文件/文件夹。 - 移除不必要的
basename调用,保留完整路径用于后续操作。 - 变量名更直观,便于代码维护和阅读。
内容的提问来源于stack exchange,提问作者J Weber
相关产品推荐
相关产品推荐

