Использование R для отображения всех файлов с указанным расширением

Я очень новичок в R и работаю над обновлением R script для повторения серии таблиц .dbf, созданных с использованием ArcGIS, и создания серии графиков.

У меня есть каталог C:\Scratch, который будет содержать все мои .dbf файлы. Однако, когда ArcGIS создает эти таблицы, он также содержит файл .dbf.xml. Я хочу удалить эти файлы .dbf.xml из списка файлов и, таким образом, свою итерацию. Я пробовал искать и экспериментировать с регулярными выражениями безрезультатно. Это основное выражение, которое я использую (исключая все различные эксперименты):

files <- list.files(pattern = "dbf")

Может ли кто-нибудь дать мне какое-то направление?

Ответ 1

files <- list.files(pattern = "\\.dbf$")

$ в конце означает, что это конец строки. "dbf$" тоже будет работать, но добавление \\. (. является специальным символом в регулярных выражениях, поэтому вам нужно его избежать), убедитесь, что вы сопоставляете только файлы с расширением .dbf (в случае, если у вас есть файлы .adbf).

Ответ 2

Попробуйте использовать glob, а не регулярные выражения, чтобы отображать только имена файлов, заканчивающиеся на .dbf

filenames <- Sys.glob("*.dbf")

Ответ 3

Подстройте шаблон, чтобы найти "\\.dbf" в конце строки, используя символ $:

list.files(pattern = "\\.dbf$")

Ответ 4

Я не очень хорошо использую сложные регулярные выражения, поэтому я бы выполнил такую ​​задачу следующим образом:

files <- list.files()
dbf.files <- files[-grep(".xml", files, fixed=T)]

В первой строке перечислены все файлы из рабочего каталога. Во-вторых, все, что содержит ".xml" (grep возвращает индексы таких строк в векторных файлах, подмножество с отрицательными индексами удаляет соответствующие записи из вектора). "фиксированный" аргумент для функции grep - это всего лишь моя прихоть, поскольку я обычно хочу, чтобы она отображала грубое сопоставление шаблонов без причудливых regexprs в стиле Perl, что может вызвать удивление для меня.

Я знаю, что такое решение просто отражает недостатки в моем образовании, но для новичков это может быть полезно =), по крайней мере, это легко.

Ответ 5

Предоставляет список файлов с полным путем:

  Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory