2011-09-11 65 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) 这会给你所有的文件在其下的一个文件夹和子文件夹下。

相关问题