2010-03-05 5 views
29

R에서 실행되는 더 큰 작업의 일부로 Windows에서 선택한 파일을 디렉토리간에 복사하고 싶습니다. R 내에서 cp patha/filea*.csv pathb과 같은 명령을 내릴 수 있습니까 (와일드 카드에주의하십시오. 추가 향신료가 필요합니까)? 이 쉘에있는 것처럼R을 사용하여 파일 복사

답변

42

나는 광고가 생각하지 않는다 irect way (포위 아웃의 수줍음). 그러나 다음과 같은 것이 보통 나를 위해 일한다.

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

노트가 :

  • 내가 의도적으로 두 단계로 분해, 그들은 결합 될 수있다.
  • 정규 표현식보기 : R은 실제 정규 표현식을 사용하고 파일 패턴과 경로를 두 개의 별도 인수로 구분합니다.
  • 정규 표현식에서 ^$ (문자열 끝/끝)을주의하십시오. 이는 와일드 카드 유형 패턴에 내재되어 있기 때문에 일반적인 잡았다하지만 regexes에서 필요합니다 (와일드 카드 패턴과 일치하는 일부 파일 이름 추가 텍스트를 선택하여 시작 및/또는 종료 할 수도 있음).
  • Windows에서 사람들은 일반적으로 list.filesignore.case = TRUE 인수를 추가하여 디렉토리 검색이이 OS에서 대소 문자를 구분하지 않는다는 사실을 모방합니다.
  • R의 glob2rx() 함수는 와일드 카드 패턴을 정규 표현식으로 변환하는 편리한 방법을 제공합니다. 예를 들어 fpattern = glob2rx('filea*.csv')은 다른 있지만 동일한 정규식을 반환합니다.
+1

패턴은''^ filea. + [.] csv "'이어야합니다. – Marek

+0

@Marek : 맞습니다! 또한, 특히 Windows 환경에서 peopole은 일반적으로 인수 ignore.case = TRUE를 추가하려고합니다. 나는 그에 따라 적절하게 편집했다. – mjv

+0

? glob2rx를 사용하여 와일드 카드를 정규식으로 변환 할 수 있습니다. –

11

당신은

  • 사용 system() 포함 자신과 사본에는 파일과 일치하는 대체 (globbing)/reg.exp을 할
  • 사용 list.files() 일명 dir() 글 로빙 명령을 발사 할 수 있습니다 개별적으로
  • 개별 파일에 사용 file.copy MJV의 대답과 같이
+0

'dir'을 들어 본 적이 없습니다. 그것은 정확히'list.files'와 정확히 일치합니다 ... 두 가지 모두 이상한 것 같습니다 – MichaelChirico

관련 문제