R语言list.files匹配指定编号文件失败问题求助
解决方法
你的问题出在list.files()的pattern参数只接受单个正则表达式字符串,而你生成的mypattern是长度为35的字符向量,函数只会取向量的第一个元素进行匹配,所以只返回了第一个文件。
下面提供两种可行的解决方案:
方案1:使用正则表达式精确匹配1-35的文件
直接构造一个能匹配数字1到35的正则表达式,传给pattern参数:
# 匹配1-9、10-19、20-29、30-35的数字 mypattern <- "NBS_NLoans_since2009_(1[0-9]|2[0-9]|3[0-5]|[1-9])\\.xls" target_files <- list.files(pattern = mypattern)
正则说明:
(1[0-9]|2[0-9]|3[0-5]|[1-9]):用|分隔不同数字区间,分别匹配10-19、20-29、30-35、1-9\\.:转义点号,因为正则里.代表任意字符,必须转义才能匹配文件名里的.
方案2:先生成所有目标文件名,再筛选目录中存在的文件
如果你不确定正则写法,或者需要确保只获取你指定的35个文件,可以先生成完整文件名列表,再筛选目录中实际存在的:
# 生成所有目标文件名 mypattern <- paste0("NBS_NLoans_since2009_", seq(1, 35),".xls") # 筛选目录中存在的文件 target_files <- mypattern[mypattern %in% list.files()]
这种方法更直观,能精准控制要匹配的文件范围,不会意外匹配到其他类似命名的文件。
内容的提问来源于stack exchange,提问作者Zuzana
相关产品推荐
相关产品推荐

