12
votes

Comment itération des noms de fichiers dans un script R?

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" xxx

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?


0 commentaires

4 Réponses :


14
votes
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)
}

2 commentaires

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 pratique.



3
votes

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)
}


0 commentaires

14
votes

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)


1 commentaires

Cela vient d'être pratique pour une autre tâche et je dois être d'accord, il est élégant



7
votes

Essayez ceci:

files <- list.files(path="", pattern=".txt", all.files=T, full.names=T)
for (file in files) {
## do stuff
}


0 commentaires