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 }