2017-10-09 6 views
0

J'ai plusieurs fichiers dans un dossier. Ils ont tous la même disposition et j'ai extrait les informations que je veux d'eux. Maintenant, pour chaque fichier, je veux écrire un fichier .csv et le nommer après le fichier d'entrée d'origine et ajouter "_output" à celui-ci.En boucle sur un ensemble de fichiers standardisés pour collecter des informations et les enregistrer dans différents fichiers

Toutefois, je ne souhaite pas répéter ce processus manuellement pour chaque fichier. Je veux boucler dessus. J'ai cherché de l'aide en ligne et trouvé beaucoup de bons conseils, y compris beaucoup ici.

Voici ce que j'ai essayé:

#Set directory 
dir = setwd("D:/FRhData/elb") #set directory 
filelist = list.files(dir) #save file names into filelist 

myfile = matrix() 
#Read files into R 
for (i in 1:length(filelist)){ 
    myfile[i] = readLines(filelist[i]) 

     *code with all calculations* 

    write.csv(x = finalDF, file = paste (filename[i] ,"_output. csv") 
}  

Malheureusement, il n'a pas fonctionné. Voici le message d'erreur que je reçois:

Erreur dans as.character (x): ne peut pas forcer type 'fermeture' au vecteur de type 'caractère'

En outre: Message d'avertissement: En mon_fichier [ i] < - readlines (filelist [i]): nombre d'éléments à remplacer est pas un multiple de la longueur de remplacement

Et « report2016-03.txt » est le nom du premier fichier le code doit être exécuté sur.

Est-ce que quelqu'un sait ce que je devrais faire pour corriger cette erreur - ou d'autres erreurs possibles que vous pouvez prévoir?

Merci beaucoup.

============================================== ======================== Voici quelques-unes des ressources que j'ai utilisé:

https://www.r-bloggers.com/looping-through-files/

How to iterate over file names in a R script?

Looping through files in R

Loop in R loading files

How to loop through a folder of CSV files in R

+0

quel est le but du ";" séparateur pour les noms de fichiers? – cumin

+0

@cumin, merci de le signaler. C'est une faute de frappe. Cela ne fait pas partie du code. –

+0

Y at-il une raison particulière pour laquelle vous utilisez 'readLines' au lieu de' read.table' ou 'read.csv' ou (recommandation personnelle)' data.table :: fread'? –

Répondre

0

Cela a fonctionné pour moi. J'ai utilisé un vecteur au lieu d'une matrice, j'ai supprimé l'appel readLines() et j'ai utilisé paste0 car il n'y avait pas de séparateur.

dir = setwd("C:/R_projects") #set directory 
filelist = list.files(dir) #save file names into filelist 

myfile = vector() 
finalDF <- data.frame(a=3, b=2) 
#Read files into R 
for (i in 1:length(filelist)){ 
    myfile[i] = filelist[i] 
    write.csv(x = finalDF, file = paste0(myfile[i] ,"_output.csv")) 
} 
list.files(dir) 
+0

Hé, @cumin , merci pour votre entrée Mais comment le fichier est supposé être lu dans R? En faisant 'myfile [i] = filelist [i]', myfile va simplement stocker une chaîne de caractères qui est le nom du fichier. –

+0

désolé pensé que le problème était l'écriture d'un fichier avec un nom basé sur un nom de fichier existant.Oui, je vois que vous avez encore besoin de lire les fichiers et créer les DF pour écrire dans le fichier avec le nom transformé. disque? – cumin

+0

Et si vous utilisiez read.csv au lieu de readLines? J'ai ajouté cela à ma boucle 'a = read.csv (filelist [i])' et il a lu et imprimé tous les fichiers que je viens de faire pour la solution précédente (ils avait des noms différents mais avait le même DF.) Au lieu d'imprimer les données dans le fichier, vous pourriez le traiter d'une autre manière les données nouvellement traitées sur le disque. – cumin