Pb d'enregistrement avec list.files(), ... Urgent...

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Pierre-Louis Rey
Messages : 5
Enregistré le : 11 Avr 2017, 12:59

Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Pierre-Louis Rey » 11 Avr 2017, 14:08

Bonjour,
ceci est mon 1er poste, j'espère que tt se passera bien et j'essaierai de contribuer à ma hauteur à ce forum!

Alors, le pb est le suivant, il est bête mais m'agace depuis ce matin...
Je demande à R de travailler sur une boucle de 5085 fichiers, la boucle fonctionne, il me ressort des fichiers externes dans un autre dossier tt va bien!
MAIS, le souci est que lors de l'enregistrement du list.files(), R enregistre l'ordre suivant: chr [1:5085] "lai_1.txt" ; "lai_10.txt" ; "lai_100.txt" au lieu de "lai_1.txt" ; "lai_2.txt" ; "lai_3.txt" et me sors donc le 2eme fichier externe avec les valeurs du lai_10 ... Voyez-vous le souci? ...
Ceci est problématique dans le sens où ces fichiers concernent des données spatio-temporelles sur lequel je travaille par la suite, de ce fait il est important que je conserve la forme de départ.

Pouvez-vous m'aider? connaissez-vous une astuce? ...

Code : Tout sélectionner

rm(list=ls())
setwd("F:/PLR_Stage/PierreLouis/Donnees_brutes/LAI/")
fichiers = list.files(".",pattern=".txt")

dossier= "LAI_modifie/"
n=length(fichiers)

###### enlever lignes 0 à 999 + remise en ordre de l'année -6000 à 0 #####
for(k in 1:n) {
 
  lai=read.table(fichiers[k],h=T,fill=T)
  lai$Year=c(-6999:0)
  fileName = paste("lai_",k,"_PLR.txt", sep="")
  newFile = paste(dossier,fileName,sep="")
  write.table(lai[1000:6999,],file=newFile,col.names=T)
  }

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Pierre-Yves Berrard » 11 Avr 2017, 14:14

Bonjour,

Si vous en avez la possibilité, il faut à mon avis nommer les fichiers "lai_001.txt", "lai_002.txt"...
PY

Pierre-Louis Rey
Messages : 5
Enregistré le : 11 Avr 2017, 12:59

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Pierre-Louis Rey » 11 Avr 2017, 14:33

Bonjour Mr Berrard,
je vois l'idée mais je ne sais pas comment l'exprimer, le rechercher ou le demander...
Savez-vous à quoi correspond ce type de numérotation? a-t-elle un nom?

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Logez Maxime » 11 Avr 2017, 15:09

Bonjour,

je remplacerai ta ligne de fileName = paste("lai_",k,"_PLR.txt", sep="") par fileName = sprintf("lai_%04d.txt", k)

Cordialement,
Maxime

Pierre-Louis Rey
Messages : 5
Enregistré le : 11 Avr 2017, 12:59

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Pierre-Louis Rey » 11 Avr 2017, 15:16

Bonjour Maxime,
Tout d'abord merci pour ta réponse.
En effet, cela fonctionne mais le souci, c'est que pour appeler mes fichiers et les renommer comme tu le proposes, le list.files() va me les remettre quand même dans le mauvais ordre de lecture dès le départ... donc cela reviendra au même...

Mais j'ai testé en remplaçant le noms d'une quinzaine de fichiers manuellement, puis j'ai relancé le script dessus et ça fonctionne, il faut juste trouver une façon d'automatiser ça sans passer par ce list.files() ...

ou alors il faudrait pouvoir rentrer cette commande dans un fichier extension qui me corrige l'ensemble de mes noms de fichiers présent dans mon répertoire (comme cela ce fait lorsqu'on veut passer d'un format .txt à .csv par exemple), sais-tu si ça peut se faire du coup avec une commande externe de R?...

Didier Plat
Messages : 225
Enregistré le : 02 Nov 2009, 16:47
Contact :

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Didier Plat » 11 Avr 2017, 16:10

Bonjour,
Il est possible de réorganiser la variable fichiers, après l'usage du list.files(). Par exemple, la ligne suivante devrait fonctionner :

Code : Tout sélectionner

fichiers[order(sapply(fichiers, function(x) as.numeric(gsub("[^[:digit:]]+", "", x))))]

Ensuite, il faut, après traitement, sauvegarder les fichiers comme l'indiquait Maxime, ce qui devrait éviter lors de lectures ultérieures d'avoir à réorganiser la variable fichiers.

Cordialement

Pierre-Louis Rey
Messages : 5
Enregistré le : 11 Avr 2017, 12:59

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Pierre-Louis Rey » 11 Avr 2017, 16:25

Bonjour Didier,
merci beaucoup, c'est exactement ce qu'il me fallait!
Je ne pensais que l'on pouvait utiliser un sapply sur ce genre de liste, j'avais essayer un sort() combiné avec un as.numeric () au lieu du order mais ça ne faisait rien... l'assemblage est bien vu!
Merci bcp à vous tous pour votre réactivité en espérant pouvoir vous aider un jour,
amicalement,

PL!

Pierre-Louis Rey
Messages : 5
Enregistré le : 11 Avr 2017, 12:59

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Pierre-Louis Rey » 11 Avr 2017, 16:27

RESOLU, MERCI

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Re: Pb d'enregistrement avec list.files(), ... Urgent...

Messagepar Bastien Gamboa » 12 Avr 2017, 07:19

Bonjour,

Une alternative à tester :

Code : Tout sélectionner

z <- c("lai_1.txt", "lai_10.txt", "lai_100.txt", "lai_2.txt", "lai_3.txt")
gtools::mixedsort(z)

HTH,
Bastien


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité