2011-09-11 69 views
5

我正在運行一個模擬研究,需要處理並保存幾個文本文件的結果。我有這樣一種方式組織數據,其中有子目錄,並且在每個子目錄中,我需要處理並獲取1000個數據文件的單個結果。在使用宏的SAS中這很容易實現。但是,我是R新手,無法弄清楚如何做到這一點。以下是我想要完成的。如何將多個目錄中的多個文件讀入R進行處理?

DATA Folder-> DC1 -> DC1R1.txt ... DC1R1000.txt 
       DC2 -> DC2R1.txt ... DC2R1000.txt 

任何幫助將不勝感激!

+0

嘗試'list.files'。 http://stackoverflow.com/search?q=%5Br%5D+list.files –

回答

7

我不與R計算機附近的權利,但讀取文件有關的功能的幫助:

dir功能將列出文件和目錄。它有一個遞歸的參數。 list.filesdir的別名。 file.info函數會告訴你(除其他事項外)路徑是否是一個目錄,並且file.path將組合路徑部分。

basenamedirname函數也可能有用。

請注意,所有這些功能都是矢量化的。

編輯現在,在一臺電腦,所以這裏有一個例子:

# Make a function to process each file 
processFile <- function(f) { 
    df <- read.csv(f) 
    # ...and do stuff... 
    file.info(f)$size # dummy result 
} 

# Find all .csv files 
files <- dir("/foo/bar/", recursive=TRUE, full.names=TRUE, pattern="\\.csv$") 

# Apply the function to all files. 
result <- sapply(files, processFile) 
+0

謝謝大家的迴應! @Tommy .....你的編碼工作到目前爲止......手指交叉....我有768個數據條件,每個條件下有1000個模擬文件。處理需要一段時間,所以我會在完成後給出一個狀態。 – Stefanie

0

您可以使用Perl的glob()函數來獲取文件的列表,並使用它發送到R,例如,RSPerl的接口。

+0

嗨Ltamar。我不熟悉Perl。我是一名統計人員,從來沒有必要使用這種方法。雖然......我聽說它非常強大。 – Stefanie

3

如果您需要對每個文件運行相同的分析,那麼您可以使用list.files(recursive = T)一次性訪問它們。假設您已將工作目錄設置爲Data Folderrecursive = T也列出子目錄中的所有文件。

+0

謝謝Ramnath。我從來沒有list.files,但會試一試。湯米的編碼工作到目前爲止。 – Stefanie

2

filenames <- list.files("path/to/files", recursive=TRUE) 這會給你所有的文件在其下的一個文件夾和子文件夾下。

相關問題