web-dev-qa-db-ja.com

Rのディレクトリ内のすべてのファイルをループし、複数のコマンドを適用します

Rのコマンドセットを、ディレクトリ内のすべての個々の.txtファイル(約300)に適用する必要があります。

私はRにあまり詳しくないので、ループについてオンラインで見たすべての助けは紛らわしい、または各ファイルに複数のコマンドを適用する必要があるときにループを適用する方法がわからない。

ディレクトリ内の各ファイル(系統樹)に適用する必要があるコマンドは次のとおりです(Rの類人猿ライブラリを使用)。

testtree <- read.tree("tree123.txt")
unrooted_tr <- unroot(testtree)
write.tree(unrooted_tr, file="unrootedtree123.txt")

これらのコマンドを個々の.txtファイルに適用するループを適用するにはどうすればよいですか(Rを使用するか、Unixコマンドラインで)。出力(unrootedtree123.txtなど)には、個々のファイルごとに異なる名前を付ける必要があります。

事前に感謝、ダニ。

33
user2087201

すべてのファイルを取得し、lapplyを使用してループし、適用する関数を次のように適用できます。

files <- list.files(path="path/to/dir", pattern="*.txt", full.names=TRUE, recursive=FALSE)
lapply(files, function(x) {
    t <- read.table(x, header=TRUE) # load file
    # apply function
    out <- function(t)
    # write to file
    write.table(out, "path/to/output", sep="\t", quote=FALSE, row.names=FALSE, col.names=TRUE)
})
66
Arun