Usando R para listar todos los archivos con una extensión especificada

Soy nuevo en R y estoy trabajando en la actualización de un script R para iterar a través de una serie de tablas .dbf creadas con ArcGIS y producir una serie de gráficos.

Tengo un directorio, C: \ Scratch, que contendrá todos mis archivos .dbf. Sin embargo, cuando ArcGIS crea estas tablas, también incluye un archivo .dbf.xml. Quiero eliminar estos archivos .dbf.xml de mi lista de archivos y, por lo tanto, mi iteración. Intenté buscar y experimentar con expresiones regulares en vano. Esta es la expresión básica que estoy usando (excluyendo toda la variada experimentación):

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

¿Alguien puede darme alguna dirección?

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

$ al final significa que este es el final de la cadena. "dbf$" también funcionará, pero agregando \\. ( . es un carácter especial en las expresiones regulares, por lo que debe escapar), asegúrese de hacer coincidir solo los archivos con la extensión .dbf (en caso de que tenga, por ejemplo, archivos .adbf ).

Pruebe esto usando globs en lugar de expresiones regulares, por lo que solo seleccionará los nombres de archivo que terminan en .dbf

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

Pega el patrón para encontrar "\\.dbf" al final de la cadena usando el carácter $ :

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

No soy muy bueno en el uso de expresiones regulares sofisticadas, así que haría esa tarea de la siguiente manera:

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

La primera línea simplemente muestra todos los archivos del directorio de trabajo. El segundo arroja todo lo que contiene ".xml" (grep devuelve índices de tales cadenas en el vector 'files'; el subconjunto con índices negativos elimina las entradas correspondientes del vector). El argumento "fijo" para la función grep es solo mi capricho, ya que generalmente quiero que pepe la concordancia de patrones crudos sin los regexprs sofisticados estilo Perl, lo que puede causar sorpresa para mí.

Soy consciente de que esa solución simplemente refleja inconvenientes en mi educación, pero para un principiante puede ser útil =) al menos es fácil.

Te da la lista de archivos con la ruta completa:

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