pb indexation dans une boucle

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 12 Mai 2006, 12:47

re ...

Tu né pa du tout a coté de la plaque, c exactement ca!


Cool :)

je pense qu’il faut décomposer ton problème (dsl de me répéter).
voici une proposition:

1- Tu crées un fichier avec TOUS tes types de sol. Tu dois certainement avoir une table dans ta base de données avec la description de tes codes de type de sol (on l’appellera le fichier code).

Code TypeDeSol GrandTypeDeSOL
111 pelouse veg
121 sable terre


sinon tu peux le construire.

Code : Tout sélectionner

# importe le fichier code
code <-read.table(« code.txt »,h=T)
row.names(code) <- code$Code


2- tu importes tes données en fichier .txt

Code : Tout sélectionner

tab1 <- read.table(« TonFichierTexte.txt »,h=T)
# tu vas obtenir les noms de colonnes suivant :
X111 X121
# R rajoute un X , mais c’est pas grave, on va l’enlever.
names(tab1) <- substring(names(tab1),2,4)

# ensuite on construit le tableau de code qui correspond à tab1
# on extrait que les lignes qui correspondent aux colonnes de tab1
code1 <- code[names(tab1),]

# à partir de là, il n’y a plus de pb.
# Ton facteur GrandTypeDeSOL est donnée par :
code1$GrandTypeDeSOL
# et tu reprends le code proposé dans le précédent post



Cela suppose ke tu connaisse déjà le nombre de matrice é le nom des type de sol à l'avance or ce ne sera pa le ka vu que lé fichier '.txt' ne seron jamé lé mem...


Oui, mais c’est pas très compliqué de reconstruire un facteur pour chaque matrice cf au-dessus
Mé je ne vois pa komen faire pr automatiser cette tache!!


Il faut peut-être pas …

En fait il fodré faire une boucle pour construire les matrices é les sauver une par une -> l'utilisateur oré juste besoin de rentrer le nombre de matrices nécessaires é le noms de chacunes pour puisser les info correspondantes dans ce ki a été fé avant....


Ça, c’est pas trop compliqué.

Code : Tout sélectionner

# Tu crées une liste
listmat <- list()
# ensuite tu peux construire ta boucle
for( i in …){
….
listmat [[i]] <- ….TonCalcul
….
names(listmat)[i] <- paste(“nom”,i,sep=””)
}
# puis tu peux appeler les différentes matrices
listmat$nom1
listmat$nom2



En espérant t’aider dans ta lourde tâche.

@+

pierre

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Messagepar Sébastien Hamel » 12 Mai 2006, 15:07

Merci de ton aide...

Une ptite précision:

lorsque j'effectue:

->listmat [[i]] <- tab1[,selec1==scan(n=1, what='character')]

ou

->listmat [[i]] <- apply (tab1[,selec1==scan(n=1, what='character')], 2, '+')

on me retourne le meme résultat, à savoir que l'application 2 n'effectue pas la somme entre les colonnes!! Il ne considère pas le apply!!

Oré tu une explication?

Ce ki membete car je penC faire a la place d'une des deux lignes:

-> listmat [[i]] <- matrix (apply (tab1[,selec1==scan(n=1, what='character')], 2, '+'), 6, 7)

afin de retrouver directement ma matrice......

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

MERCI BCP

Messagepar Sébastien Hamel » 16 Mai 2006, 08:53

pb résolu.... merci encore pour ton aide é le temps que tu y as consacré...

Cordialement,

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 16 Mai 2006, 09:12

bonjour,


pb résolu.... merci encore pour ton aide é le temps que tu y as consacré...


de rien :)

je vais peut-être encore me répéter, mais
je pense qu’il est vraiment important (vital ?) de décomposer tes calculs.
ça simplifie ton code et ça simplifie la relecture de ton code.

Exemple :
1- tu importes ton tableau
2- tu fais la somme des colonnes
3- tu crées ta matrice et tu la stockes dans la liste
etc...


@+ et bonne continuation :)


Pierre


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron