我正在进行一项模拟研究,并需要处理和保存来自多个文本文件的结果。我的数据组织方式是,有子目录,在每个子目录中,我需要处理并获取1000个数据文件的单个结果。在SAS中,使用宏非常容易实现此操作。但是,我是R的新手,无法弄清如何执行此操作。以下是我想要实现的内容。
DATA Folder-> DC1 -> DC1R1.txt ... DC1R1000.txt
DC2 -> DC2R1.txt ... DC2R1000.txt
任何帮助都将不胜感激!
我正在进行一项模拟研究,并需要处理和保存来自多个文本文件的结果。我的数据组织方式是,有子目录,在每个子目录中,我需要处理并获取1000个数据文件的单个结果。在SAS中,使用宏非常容易实现此操作。但是,我是R的新手,无法弄清如何执行此操作。以下是我想要实现的内容。
DATA Folder-> DC1 -> DC1R1.txt ... DC1R1000.txt
DC2 -> DC2R1.txt ... DC2R1000.txt
我现在不在使用R的电脑旁边,但是可以阅读与文件相关的函数帮助文档:
dir
函数会列出文件和目录。 它具有递归参数。 list.files
是 `dir` 的别名。`file.info` 函数将告诉您(除其他外),路径是否为目录,`file.path` 将组合路径部分。
basename
和 dirname
函数也可能很有用。
请注意,所有这些函数都进行了向量化处理。
编辑 现在在计算机旁边,所以这里有一个示例:
# 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)
如果你需要对每个文件运行相同的分析,那么你可以使用 list.files(recursive = T)
一次性访问它们。这是在假定你已经将工作目录设置为 Data Folder
的情况下。 recursive = T
还会列出所有子目录中的文件。
filenames <- list.files("路径/到/文件", recursive=TRUE)
这段代码会列出指定路径下及其子目录中的所有文件。
您可以使用 Perl 的 glob()
函数获取文件列表,并通过 RSPerl 接口将其发送到 R。
list.files
。http://stackoverflow.com/search?q=%5Br%5D+list.files - Roman Luštrik