2010-03-05 18 views
29

Jako część większego zadania wykonywanego w R uruchomionym pod oknami, chciałbym skopiować wybrane pliki między katalogami. Czy jest możliwe podanie w ramach polecenia R jak cp patha/filea*.csv pathb (zwróć uwagę na wieloznacznik, aby uzyskać dodatkową przyprawę)?używanie R do kopiowania plików

Odpowiedz

42

nie sądzę, nie ma reklam poprawny sposób (nieukończenie łuskania), ale coś podobnego do tych zwykle działa dla mnie.

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

Uwagi:

  • celowo rozkłada się w dwóch etapach, mogą być łączone.
  • Zobacz wyrażenie regularne: R używa prawdziwego wyrażenia regularnego, a także oddziela wzorzec pliku od ścieżki w dwóch osobnych argumentach.
  • zanotuj ^ i $ (beg/end of string) w wyrażeniu regularnym - jest to typowe pojęcie, ponieważ są one niejawne dla wzorców typu wieloznacznego, ale wymagane w przypadku wyrażeń regularnych (w przeciwnym razie niektóre nazwy plików pasują do wzorca wieloznacznego; ale także zacznij i/lub zakończ z dodatkowym tekstem, który również zostanie wybrany).
  • W świecie Windows ludzie zazwyczaj dodają argument ignore.case = TRUE do list.files, aby naśladować fakt, że w wyszukiwaniu katalogu nie ma znaczenia wielkość liter w tym systemie operacyjnym.
  • Funkcja R glob2rx() zapewnia wygodny sposób konwertowania wzorców wieloznacznych na wyrażenia regularne. Na przykład fpattern = glob2rx('filea*.csv') zwraca inne, ale równoważne wyrażenie regularne.
+1

Myślę, że wzór powinien być' "^ filea. + [.] Csv" '. – Marek

+0

@Marek: prawda jesteś! Ponadto, w szczególności w świecie Windows, peopole zazwyczaj chce dodać argument 'ignore.case = TRUE'. Odpowiednio zredagowałem, dzięki. – mjv

+0

możesz użyć? Glob2rx do konwersji z symboli wieloznacznych do wyrażeń regularnych. –

11

Można

  • użycie system() odpalać polecenia tak, jakby to było na skorupach, włącznie globbing
  • korzystanie list.files() aka dir() zrobić globowania/reg.exp dopasowanie siebie i kopiowanie plików indywidualnie
  • użycie file.copy na pojedynczych plików, jak pokazano w odpowiedzi Murcja za
+0

nigdy nie słyszałem o 'dir'. Jest to \ "dokładnie \" identyczne z 'list.files' ... co dziwne, że oba mają – MichaelChirico

Powiązane problemy