list.files函数pattern参数无法识别括号的问题咨询
问题原因与解决方法
这不是list.files()的问题,是你对参数pattern的匹配规则理解有误:
list.files()的pattern参数默认采用正则表达式模式,而括号()在正则语法里是「分组匹配」的特殊元字符,不是普通文本字符。你直接写带括号的文件名,会被R解析成正则规则,自然匹配不到实际文件名里的括号,所以返回character(0)。
两种解决办法
方法1:转义特殊字符
把文件名里的(换成\\(,)换成\\)(R里正则转义需要双反斜杠):
list.files(path = paste0(EDOS_test[i], "/shp"), pattern = "Lomerios y Planicies con selva baja caducifolia \\(de la Sierra de Cucharas\\)", full.names = TRUE)
方法2:开启固定字符串匹配
给list.files()加fixed=TRUE参数,此时pattern会被当作纯文本匹配,不需要转义任何特殊字符:
list.files(path = paste0(EDOS_test[i], "/shp"), pattern = "Lomerios y Planicies con selva baja caducifolia (de la Sierra de Cucharas)", full.names = TRUE, fixed = TRUE)
两种方法都能精准匹配你要的那4个文件,不会带出另一组区域的文件。
内容的提问来源于stack exchange,提问作者Inder
相关产品推荐
相关产品推荐

