IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Utiliser les noms de colonne pour une boucle for


Sujet :

R

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Utiliser les noms de colonne pour une boucle for
    Bonjour à tous

    Je réalise une série de test sur des données.
    Ces tests sont regroupés dans un srcipt, qui s'applique sur une colonne de mon tableau de données (appelé par read.csv2('blablabla.csv';header=T)), et ça marche plutôt bien.
    Mais je voudrai créer une petite boucle qui fasse que le script s'applique tour à tour sur les différentes colonnes (les différentes variables étudiées pour moi).
    Pour l'instant je le fait à la main mais c'est vraiment moche.

    Du coup la question c'est : comment utiliser les noms de colonne (de variable) en tant qu'argument sur lequel effectuer ma boucle?

    Merci

    Rémi

  2. #2
    Membre actif Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Points : 296
    Points
    296
    Par défaut
    Tu peux donner le code que tu utilises ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Oui voilà le script, désolé c'est un peu un sacré bordel parce qu'il est en construction, y a des trucs moche dedans, et il est loin d'etre optimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     ##script pour analyse pré-ANOVA
    tec<-read.csv2('monfichier.csv', header=T)
     
     
    layout(matrix(1:8,2,4))
     
    myfun<-function(mdb)
    {
    data<-mdb
     
     
     
    #Normalisation de la variable étudiée
    #mdb<-asin(sqrt(mdb/100))
     
    modele<-aov(mdb~CLONE)
    residus<-residuals(modele)
    hist(residus,c="grey",main=paste("Histogramme des résidus",names(reg)[3]),ylab="Fréquence",xlab="valeurs des résidus")
     
    #test de la normalité des résidus :
    shapiro.test(residus)
    print(shapiro.test(residus))
     
    #test d'homogénéité des variances : 
    bartlett.test(residus~CLONE)
    print(bartlett.test(residus~CLONE))
    p.value<-bartlett.test(residus~CLONE)$p.value
     
    ##anova ou kruskal:
     
    if (p.value>0.05) {
     
    	anova(modele)
    	print(anova(modele))
     
    ##analyse post-hoc :
    	#TukeyHSD(modele)
    	#TukeyHSDs(TukeyHSD(modele))
    	#print(TukeyHSD(modele))
    	#print(TukeyHSDs(TukeyHSD(modele)))
     
    	print(SNK.test(modele,"CLONE",group=F))
    	print(SNK.test(modele,"CLONE",group=T))
     
    ##script pour graphique de comparaison des moyennes de chaque clone sur le regroupement d'années, pour une maladie mdb:
     
    	par(las=1,col.axis="royalblue")
     
    	moyennes<-tapply(mdb,CLONE,mean)
    	ecartypes<-tapply(mdb,CLONE,sd)
    	n<-tapply(mdb,CLONE,length)
     
     
    	mybarcol <- "gray20"
     
    	mp <- barplot(moyennes, beside = TRUE,
    	col = c("lightblue","mistyrose","lightcyan","lavender","lightgreen","salmon","slateblue","seagreen","tomato1","yellow2","violetred3","orange3","gray47"),
    	ylim= c(0,15),
    	xlab="Clone",
    	ylab="Pourcentage moyen de pieds touchés",
    	main = paste("Sensibilité à la maladie",names(reg)[3]), font.main = 1,
    	sub = "barres d'erreur = +/- 2 S.E", col.sub = mybarcol,cex.names = 1.5,xpd=F)
     
    	segments(mp, moyennes - 2*ecartypes/sqrt(n), mp, moyennes +
    	2*ecartypes/sqrt(n), col = mybarcol, lwd = 1.5)
     
    	mtext(side = 1, at = (mp), line = 2,
    	text = paste(formatC(moyennes),"+/-",round(2*ecartypes/sqrt(n),digits=2)), col = "grey",cex=0.5)
     
    }else{
     
     
    ##script pour analyse des variables non paramétriques, pas d'anova possible
     
    #Test de Kruskal-Wallis : rangs significativement différents?
     
    	kruskal.test(mdb~CLONE)
    	print(kruskal.test(mdb~CLONE))
     
    # test de comparaison multiple non paramétrique
     
    	kruskalmc(mdb,CLONE,probs=0.05,cont=NULL)
    	print(kruskalmc(mdb,CLONE,probs=0.05,cont=NULL))
    }
    }
     
    mdb<-P_ESCA
    myfun(mdb)
    mdb<-P_BDA
    myfun(mdb)
    mdb<-P_ESCA_BDA
    myfun(mdb)
    mdb<-P_EUTY
    myfun(mdb)
    voilà donc le seul moyen que j'ai trouvé c'est l'espèce d'horreur que vous voyez là, en créant une fonction et en l'appliquant de force sur mes différentes variables. Mais évidemment si je rajoute de nouvelles variables dans mes données, je dois refaire le script, c'est nul.

    Tout ce que je sais faire avec ces noms de variable, c'est justement extraire leur nom : names(tec)[numéro de colonne]

    Voilà
    merci d'avance

    Rémi

Discussions similaires

  1. confiner les noms des colonnes d'une table
    Par grecko21 dans le forum Zend_Db
    Réponses: 1
    Dernier message: 24/08/2009, 17h04
  2. Comment rendre dynamique les noms des colonnes d'une vue
    Par patic dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/02/2009, 10h41
  3. Afficher les noms des colonnes d'une table
    Par witch dans le forum Requêtes
    Réponses: 10
    Dernier message: 07/10/2008, 13h25
  4. Recupérer les nom des colonnes d 'une table
    Par mitnick2006 dans le forum JDBC
    Réponses: 2
    Dernier message: 08/05/2008, 21h56
  5. utiliser une valeur float pour une boucle for
    Par didi59650 dans le forum Débuter
    Réponses: 6
    Dernier message: 18/04/2006, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo