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 :

Stocker valeur boucle


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 67
    Points
    67
    Par défaut Stocker valeur boucle
    Bonjour à tous,

    j'utilise plusieurs boucles pour parcourir mes arguments et ensuite faire des requêtes avec ces arguments
    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
    liste_arg2=list('2009','2010','2011','2012')
    liste_arg1=list('CRD','Verst','OU','ET')
    liste_arg3=list('Mars','Juin','Sept','Dec')
     
    resultat_nb_a=0
    resultat_nb_b=0
    resultat_nb_a_dans_b=0
     
    position=1
    for (i in 1:length(liste_arg2))
    {
    arg2=liste_arg2[[i]]
     
    for (j in 1:length(liste_arg3))
    	{
    		arg2=paste(liste_arg3[[j]],"_",liste_arg2[[i]],sep="")
    		print(arg2)
     
    		for (k in 1:length(liste_arg1))
    		{
     
    			arg1=paste(arg2,'_',liste_arg1[[k]],sep="")
    			print(arg1)
     
    			texte3=paste("SELECT COUNT(",arg1,")"," FROM Mod",sep="")
    			texte4=paste("SELECT COUNT(",arg2,")"," FROM Vrai",sep="")
    			texte5=paste("SELECT COUNT(",arg1,")"," FROM Mod WHERE ",arg1," IN (SELECT ",arg2," FROM Vrai)",sep="")
     
    			print(texte3)
    			nb_a=sqldf(texte3)
     
    			print(texte4)
    			nb_b=sqldf(texte4)
     
    			print(texte5)
    			nb_a_dans_b=sqldf(texte5)
     
     
    			resultat_nb_a[position]=nb_a
    			resultat_nb_b[position]=nb_b
    			resultat_nb_a_dans_b[position]=nb_a_dans_b
    			position=position+1
     
    		}	
    	}
    }
     
    resultat_nb_a
    resultat_nb_b
    resultat_nb_a_dans_b
    Pour une année, j'ai 4 mois, et pour chaque mois,4 tests.

    J'aimerai savoir si c'est possible de stocker mes résultats proprement dans un tableau?

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Oh god shoking
    Du SQL dans R, et le tout dans une triple boucle.

    Pourquoi utilises tu R si c'est pour faire ca?
    Le prend pas mal mais la c'est une horreur ton code

    Il existe un tas de fonctions R plus élégantes et plus efficaces pour faire toutes les requêtes que tu veux sur des bases de données.


    Explique nous concrètement quelles sont tes données et ce que tu veux obtenir en sortie et on t'aidera en R à stocker tes résultats et coder proprement, mais la non, pas ca par pitié

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 67
    Points
    67
    Par défaut
    Ah bon? lol
    Moi je trouvai ça propre.

    Je dois juste comparer des tables de données.
    J'ai des tables de modélisations et des tables vraies.

    Dans les table de modélisation il y a les numéros de dossier qui ont eu l’événement X par modélisation.

    Dans les vraies il y a les numéros de dossier qui ont eu l’événement X réellement.

    Pour une année j'ai 4 dates d'arrêtées et 4 règles de gestions possible qui m'indiquent de différentes manière si X s'est produit.

    En faite je fait une boucle d'abord sur mes années pour traiter toutes les années, en suite une boucle sur la date d'arrêté et en suite une boucle sur la règle de gestion pour pouvoir tout balayer.

    De manière à savoir combien sont bien modélisés, mal modélisés, non modélisés suivant la règle de gestion utilisés.

    Je ne vois pas comment faire d'autre à part des boucles et des requêtes pour pouvoir traiter toutes les données.

    Ca marche très bien, c'est juste au niveau du stockage que c'est prise de tête j'aimerai un stockage par année décomposé par Date puis par règles et non les valeurs à la suite dans un vecteur...

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Citation Envoyé par Stepsbysteps Voir le message
    J'ai des tables de modélisations et des tables vraies.

    Dans les table de modélisation il y a les numéros de dossier qui ont eu l’événement X par modélisation.

    Dans les vraies il y a les numéros de dossier qui ont eu l’événement X réellement.

    Pour une année j'ai 4 dates d'arrêtées et 4 règles de gestions possible qui m'indiquent de différentes manière si X s'est produit.

    En faite je fait une boucle d'abord sur mes années pour traiter toutes les années, en suite une boucle sur la date d'arrêté et en suite une boucle sur la règle de gestion pour pouvoir tout balayer.
    Je pars du principe que tu as une table model pour les cas prédits avec 4 variables : le numero de dossier, l'année, le mois et le test (ou règle de gestion).

    Idem pour une table reel pour les cas avérés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    VP<-intersect(model$dossier,reel$dossier) #Vrai Positif : dans model et reel
    FP<-setdiff(model$dossier,reel$dossier) #Faux Positif : dans model et pas dans reel
    FN<-setdiff(reel$dossier,model$dossier) #Faux Negatif : pas ds model mais dans reel
     
    reelVP<-reel[reel$dossier %in% VP,]
    tapply(reelVP$dossier,list(reelVP$annee,reelVP$mois,reelVP$test),length)
     
    modelFP<-model[model$dossier %in% FP,]
    tapply(modelFP$dossier,list(modelFP$annee,modelFP$mois,modelFP$test),length)
     
    reelFN<-reel[reel$dossier %in% FN,]
    tapply(reelFN$dossier,list(reelFN$annee,reelFN$mois,reelFN$test),length)
    Et comme c'est codé proprement tout est déjà facilement accessible et tout bien classé par année puis mois puis test.
    Tu remarqueras qu'il n'y a pas de boucle et pas de sql.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 67
    Points
    67
    Par défaut
    Bonjour merci de la technique,
    en faite mes données sont comme ça et je sais pas si on sait compris sur ce point?
    Images attachées Images attachées  

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Comme tu n'as rien précisé sur la tête de tes données forcément je risquais pas de comprendre ton problème...

    Je pense que ton soucis la c'est surtout que ton data frame est inexploitable sous cette forme (disons le franchement).

    Ca te simplifierais pas la vie de passer de ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Juin_2008_CRD Sept_2007_truc Nov_2012_gest
    1             1             10             9
    2             2              4            18
    3             3              5            27
    à ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       dossier gestion mois annee
    1       1     CRD Juin  2008
    2      10    truc Sept  2007
    3       9    gest  Nov  2012
    4       2     CRD Juin  2008
    5       4    truc Sept  2007
    6      18    gest  Nov  2012
    7       3     CRD Juin  2008
    8       5    truc Sept  2007
    9      27    gest  Nov  2012

    En faisant (où model est ton dataframe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    model<-t(model)
    dossier<-c()
    for( i in 1:ncol(model)){dossier<-c(dossier,model[,i])}
     
    gestion<-gsub(pattern=".?.?.?.?.?._",replacement="",names(dossier))
    mois<-gsub(pattern="_.?.?.?.?.?......",replacement="",names(dossier)))
    annee<-gsub(pattern="_...?.?.?",replacement="",sub(pattern="?.?.?.?.?._",replacement="",names(dossier))))
     
     
    model<-as.data.frame(dossier=dossier,mois=mois,annee=annee,gestion=gestion)

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 67
    Points
    67
    Par défaut
    Merci ce ton temps encore qui est très appréciable, je vais voir ce que je peux en faire même si ce que j'ai fait marche très bien ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre valeur et valeur boucle+1
    Par jaireimy dans le forum LabVIEW
    Réponses: 5
    Dernier message: 25/11/2008, 17h24
  2. stocker valeur dll
    Par wadwin dans le forum C++
    Réponses: 12
    Dernier message: 24/06/2008, 14h14
  3. Stocker Valeur Enum Sql Server 2000
    Par b_lob dans le forum Accès aux données
    Réponses: 7
    Dernier message: 16/11/2007, 13h46
  4. Récuperation valeur boucle
    Par babou54 dans le forum Langage
    Réponses: 2
    Dernier message: 31/07/2007, 09h46
  5. erreur too few arguments ; recup valeur boucle
    Par Sam 069 dans le forum Access
    Réponses: 2
    Dernier message: 26/07/2006, 17h38

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