R语言list.files函数路径通配符不生效问题求助
R语言list.files用通配符失败的原因及解决方法
问题原因
list.files()的path参数仅支持传入具体的目录路径,无法识别路径中的*这类shell通配符。你代码里写的./Unzipped/",input_files[1],"/Variants/*/"会把*当作路径的一部分去查找,而不是用来匹配任意子目录,自然找不到对应文件,返回character(0)。
解决方法
方法1:先获取子目录再遍历找文件
先拿到Variants目录下的所有子目录,再逐个在这些子目录里查找.tsv文件:
# 获取Variants下的所有直接子目录 sub_dirs <- list.dirs(path = paste0("./Unzipped/", input_files[1], "/Variants"), recursive = FALSE) # 遍历子目录,收集所有tsv文件 tsv_files <- unlist(lapply(sub_dirs, function(dir) { list.files(path = dir, pattern = "tsv$", full.names = TRUE) }))
方法2:递归查找文件
直接在Variants目录下开启递归查找,自动遍历所有子目录找.tsv文件:
tsv_files <- list.files( path = paste0("./Unzipped/", input_files[1], "/Variants"), pattern = "tsv$", recursive = TRUE, full.names = TRUE )
如果需要限定只找Variants下一级子目录里的文件,可以用正则过滤结果:
# 过滤路径,确保Variants后只有一级子目录 filtered_files <- tsv_files[grepl("./Unzipped/[^/]+/Variants/[^/]+/[^/]+\\.tsv$", tsv_files)]
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

