2010-03-05 16 views
29

Como parte de una tarea más grande realizada en R ejecutada en Windows, me gustaría copiar los archivos seleccionados entre directorios. ¿Es posible dar dentro de R un comando como cp patha/filea*.csv pathb (observe el comodín, para obtener más sabor)?usando R para copiar archivos

Respuesta

42

no creo que existe anuncio manera directa (tímida de bombardeo), pero algo como lo siguiente generalmente me funciona.

flist <- list.files("patha", "^filea.+[.]csv$", full.names = TRUE) 
file.copy(flist, "pathb") 

Notas:

  • deliberadamente descompone en dos etapas, que se pueden combinar.
  • Vea la expresión regular: R usa la expresión regular verdadera, y también separa el patrón del archivo de la ruta, en dos argumentos separados.
  • observe ^ y $ (principio/fin de cadena) en la expresión regular - esto es un resultado común, ya que están implícitos en patrones de tipo comodín, pero necesarios con expresiones regulares (no sea que algunos nombres de archivos coincidan con el patrón de comodín pero también se iniciará y/o finalizará con texto adicional seleccionado).
  • En el mundo de Windows, las personas suelen agregar el argumento ignore.case = TRUE al list.files, para emular el hecho de que las búsquedas de directorios no distinguen entre mayúsculas y minúsculas con este sistema operativo.
  • La función de R glob2rx() proporciona una forma conveniente de convertir patrones de comodines a expresiones regulares. Por ejemplo, fpattern = glob2rx('filea*.csv') devuelve una expresión regular diferente pero equivalente.
+1

Creo que el patrón debería ser' "^ filea. + [.] Csv" '. – Marek

+0

@Marek: ¡lo tienes! Además, en particular en el mundo de Windows, peopole normalmente querrá agregar el argumento 'ignore.case = TRUE'. Edité en consecuencia, gracias. – mjv

+0

puede usar? Glob2rx para convertir de comodines a expresiones regulares. –

11

Puede

  • uso system() de disparar un comando como si se tratara de cáscara, incl globbing
  • uso list.files() aka dir() para hacer el englobamiento/reg.exp juego mismo y la copia de los archivos individualmente
  • uso file.copy en archivos individuales, como se muestra en la respuesta de MJV
+0

nunca he oído hablar de 'dir'. Es _exactamente_ idéntico a 'list.files' ... extraño tener ambos – MichaelChirico

Cuestiones relacionadas