如何从多个目录中读取多个文件到R中进行处理?

时间:2011-09-11 05:34:59

标签: r batch-file

我正在进行模拟研究,需要处理并保存多个文本文件的结果。我以这样的方式组织数据,其中有子目录,并且在每个子目录中,我需要处理并获得1000个数据文件的单独结果。使用宏在SAS中很容易做到这一点。但是,我是R的新手,无法弄清楚如何做到这一点。以下是我想要完成的事情。

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

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:8)

我现在不在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)

答案 1 :(得分:4)

如果您需要对每个文件运行相同的分析,则可以使用list.files(recursive = T)一次性访问它们。这假设您已将工作目录设置为Data Folderrecursive = T也列出了子目录中的所有文件。

答案 2 :(得分:2)

filenames <- list.files("path/to/files", recursive=TRUE) 这将为您提供位于一个文件夹下的所有文件及其下的子文件夹。

答案 3 :(得分:0)

您可以使用Perl的glob ()函数获取文件列表,并使用例如RSPerl的界面将其发送给R.