web-dev-qa-db-fra.com

Boucler tous les fichiers du répertoire dans R, en appliquant plusieurs commandes

J'ai besoin d'appliquer un ensemble de commandes en R à tous les individus .txt fichiers (environ 300) dans un répertoire.

Je ne connais pas très bien R, donc toute l'aide que j'ai consultée en ligne sur le bouclage est source de confusion, ou je ne peux pas trouver comment appliquer une boucle lorsque vous devez appliquer plusieurs commandes à chaque fichier.

Les commandes que je dois appliquer à chaque fichier (arbres phylogénétiques) dans le répertoire sont (qui utilise la bibliothèque de singes de R):

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

Comment appliquer une boucle qui appliquera ces commandes à chaque fichier .txt individuel (en utilisant R ou dans la ligne de commande Unix)? La sortie (par exemple, unrootedtree123.txt) devra avoir un nom différent pour chaque fichier individuel.

Merci d'avance, Dani.

33
user2087201

Vous pouvez obtenir tous les fichiers, puis boucler en utilisant lapply et appliquer la fonction que vous souhaitez appliquer comme suit:

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