Шаблон регулярного выражения работает в grepl, а не в каталоге - PullRequest
2 голосов
/ 16 июня 2020

В следующем примере я определяю шаблон для поиска файлов, имеющих / Data / на своем пути и заканчивающихся .dta.

Если я использую команду dir без шаблона, в соответствии с grepl файлы Я получаю соответствие шаблону:

mypattern <- '.*/Data/.*\\.dta'
files <- dir('c:/Temp/Test',recursive=T)

files
#> [1] "dir1/Data/test2.dta" "dir2/Data/test.dta"

grepl(pattern = mypattern, files)
#> [1] TRUE TRUE

Почему dir с тем же шаблоном ничего не возвращает?

dir('c:/Temp/Test',pattern = mypattern, recursive=T)
#> character(0)

Спасибо за вашу помощь.

EDIT: SessionInfo

R version 4.0.0 (2020-04-24)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 10586)

Matrix products: default

Random number generation:
 RNG:     Mersenne-Twister 
 Normal:  Inversion 
 Sample:  Rounding 

locale:
[1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252    LC_MONETARY=French_France.1252
[4] LC_NUMERIC=C                   LC_TIME=French_France.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base  

1 Ответ

3 голосов
/ 16 июня 2020

Когда вы запускаете dir(pattern=*, recursive=TRUE), pattern применяется индивидуально к именам (не путям) файла для каждого каталога. Попробуйте

files <- dir(recursive=TRUE)
grep(pattern=pattern, files, values=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...