Использование R для копирования файлов на основе вектора - PullRequest
1 голос
/ 04 февраля 2020

Я нашел несколько похожих постов, но ничего, что вполне решает мою проблему:

Я хочу копировать файлы в зависимости от того, соответствует ли часть имени файла вектору. Следующее возвращает только первое совпадение в векторе, а не каждое совпадение

vector_key<- c(12345, 54321)

list.files("C:/Userfiles")

, где пользовательские файлы включают «12345.pdf», «54321.pdf», «32.pdf» и «23.pdf». из примерно 200 других файлов.

files<- list.files("C:/Userfiles",  full.names= TRUE, pattern = vector_key)
print files

При этом печатается первое совпадение, но не второе

"C: / Userfiles / 12345.pdf", но не "C: / Userfiles / 54321 / pdf "

Буду признателен за любую помощь в том, как составлять list.files и сопоставлять ВСЕ шаблоны в vector_key, а не только в первом совпадении.

1 Ответ

0 голосов
/ 04 февраля 2020

Нам нужно pattern в виде одной строки. Согласно шаблону ?list.files

- необязательное регулярное выражение. Будут возвращены только имена файлов, которые соответствуют регулярному выражению.

Здесь | является метасимволом, обозначающим OR в регулярном выражении

pat <- paste(vector_key, collapse = "|")
list.files("C:/Userfiles",  full.names= TRUE, pattern = pat)

Также, если нужно получить все файлы с .pdf, просто используйте

list.files("C:/Userfiles", full.names = TRUE, pattern = "^\\d+\\.pdf")

, где \\d+ - одна или несколько цифр, за которыми следует . (. - метасимвол, который соответствует любому символу, поэтому его следует либо экранировать (\\), либо поместить в квадратные скобки ([.], чтобы оценить буквально)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...