Un script r très simple ajoute un indice de ligne ascendant à un fichier texte "0.txt" et ajoute également un "temps" d'en-tête. Après cela, les données sont écrites dans un fichier "0-edit.txt" supposent que j'ai 4 fichiers appelés 0.txt, 1.txt, 2.txt, ... dans le Même dossier, comment puis-je utiliser un compteur (ou quelque chose d'autre) pour itérer ces noms de fichier dans mon script? p> p>
4 Réponses :
for(i in 0:3) {
infile <- paste(i,".txt",sep="")
outfile <- paste(i,"-edit.txt",sep="")
data <- read.table(infile,header=TRUE,sep=",",row.names=NULL)
colnames(data)[1] = "time"
write.table(data,quote=FALSE,sep=", ",outfile)
}
Merci beaucoup, la fonction de pâte m'a échappé d'une manière ou d'une autre
@Martin: De rien. Vous pouvez également trouver ? Fichier.path code> pratique.
Plus généralement, vous pouvez utiliser dir () code> pour obtenir les fichiers dans un répertoire donné et utiliser sélectionner code> pour la limiter aux fichiers .txt. file.dir <- "/path/to/files"
for(infile in dir(file.dir, pattern="\\.txt$")) {
outfile <- gsub("\\.txt$","-edit\\.txt", infile)
data <- read.table(infile,header=TRUE,sep=",",row.names=NULL)
colnames(data)[1] = "time"
write.table(data,quote=FALSE,sep=", ",outfile)
}
Voici une solution sans boucle à l'aide de la fabrique:
infiles <- dir(pattern='\\.txt$')
change.files <- function(file){
data <- read.table(file, header=TRUE, sep=",", row.names=NULL)
colnames(data)[1] = "time"
write.table(data, quote=FALSE, sep=", ", sub("\\.txt$","-edit.txt", file))
}
lapply(infiles , change.files)
Cela vient d'être pratique pour une autre tâche et je dois être d'accord, il est élégant
Essayez ceci:
files <- list.files(path="", pattern=".txt", all.files=T, full.names=T)
for (file in files) {
## do stuff
}