R:使用列表中的值应用函数

时间:2013-05-15 17:42:53

标签: r

我目前正在阅读一系列文件,一次一个地应用相同的功能,然后合并结果数据框,例如:

>MyRows <- c("RowA", "RowB", "RowC")
>
>File1_DF <- read.delim("\\\\DirectoryToFiles\\File1_Folder\\File1.txt", stringsAsFactors=FALSE, check.names=FALSE)
>File1_DF <- as.data.frame(t(File1_DF[MyRows,]))
>File1_DF <- as.data.frame(t(File1_DF))
>mergeDF <- merge(mergeDF,File1_DF, by.x = "Row.names", by.y="row.names")
>
>File2_DF <- read.delim("\\\\DirectoryToFiles\\File2_Folder\\File2.txt", stringsAsFactors=FALSE, check.names=FALSE)
>File2_DF <- as.data.frame(t(File2_DF[MyRows,]))
>File2_DF <- as.data.frame(t(File2_DF))
>mergeDF <- merge(mergeDF,File2_DF, by.x = "Row.names", by.y="row.names")

...等

我想知道我是否可以使用文件名列表c(“File1”,“File2”,“File2”)等,并应用一个函数来实现更自动化的功能?这将涉及使用目录路径中的列表值来读取文件,即

>*MyFilesValue*_DF <- read.delim("\\\\DirectoryToFolders\\*MyFilesValue*_Folder\\*MyFilesValue*.txt", stringsAsFactors=FALSE, check.names=FALSE)

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

以下是使用ReduceSys.glob的一种方式。

fpaths <- Sys.glob(file.path('\\\\DirectoryToFiles\\File1_Folder\\', 'File*.txt'))
dfs <- lapply(fpaths, read.delim, stringsAsFactors=FALSE, check.names=FALSE)
dfs <- lapply(dfs, function(df) as.data.frame(t(as.data.frame(t(df[MyRows,])))))
merge.fun <- function(mergeDF, nextDF) {
    merge(mergeDF, nextDF, by.x='Row.names', by.y='row.names')
}
result <- Reduce(merge.fun, c(mergeDF, dfs))