41

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

私は R にあまり詳しくないので、オンラインで調べたループに関するすべてのヘルプが混乱を招くか、各ファイルに複数のコマンドを適用する必要がある場合にループを適用する方法がわかりません。

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

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

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

前もってありがとう、ダニ。

4

1 に答える 1

86

次のように、すべてのファイルを取得して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)
})
于 2013-02-19T13:28:46.867 に答える