2010-03-05 26 views
29

作爲在Windows下運行R的大型任務的一部分,我想在目錄之間複製選定的文件。是否有可能在R內發出類似cp patha/filea*.csv pathb的命令(注意通配符,用於額外的香料)?使用R來複制文件

回答

42

我不認爲有廣告直接的方式(害羞的脫殼),但類似以下的東西通常適用於我。

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

注:

  • 我特意在兩個步驟中分解,可以將它們組合。
  • 請參閱正則表達式:R使用true正則表達式,並將文件模式與路徑分開,分爲兩個獨立的參數。
  • 注意正則表達式中的^$(beg /字符串結尾) - 這是一個常見的疑難問題,因爲它們對通配符類型模式是隱含的,但對於正則表達式是必需的(避免與通配符模式匹配的某些文件名但也可以選擇附加文本開始和/或結束)。
  • 在Windows環境中,人們通常會將ignore.case = TRUE參數添加到list.files,以模擬目錄搜索對此操作系統不區分大小寫的事實。
  • R的glob2rx()函數提供了將通配符模式轉換爲正則表達式的便捷方式。例如,fpattern = glob2rx('filea*.csv')返回一個不同但等效的正則表達式。
+1

我認爲這個模式應該是''^ filea。+ [。] csv「'。 – Marek 2010-03-05 08:28:35

+0

@Marek:對,你是!另外,特別是在Windows世界中,人們通常會添加「ignore.case = TRUE」參數。我相應編輯,謝謝。 – mjv 2010-03-05 13:16:57

+0

您可以使用?glob2rx將通配符轉換爲正則表達式。 – 2010-03-05 14:45:13

11

可以

  • 使用system()到斷火的命令,如果它是在外殼,含通配符
  • 使用list.files()又名dir()做文件名匹配/ reg.exp匹配自己和拷貝文件分別如圖MJV的回答
  • 對單個文件使用file.copy
+0

從來沒有聽說過'dir'。它與'list.files'非常相似...奇怪的是都有 – MichaelChirico 2016-08-30 00:23:43