[R] Selection dans un tableau.

Selection dans un tableau. [R] - Divers - Programmation

Marsh Posté le 28-05-2010 à 16:55:17    

Bonjour,
 
J'ai besoin de mettre dans une colonne 8 de mon tableau des valeurs si elles repondent au critere :  Datapoints[[7]][jj] > acceptable  ou dans une colonne 9 si elles ne repondent pas au critere.
 
J'ai donc le code tres simple suivant et fonctionnant :
         for(jj in limMin:limMax){
    if( Datapoints[[7]][jj] > acceptable)
    {
         
       Datapoints[[8]][jj] <- Datapoints[[5]][jj]
         
       Datapoints[[9]][jj] <- NA

     }
       
    else  
    {
         
       Datapoints[[9]][jj] <- Datapoints[[5]][jj]
         
       Datapoints[[8]][jj] <- NA
 
    }

}
 
Me rend correctement quelque chose du genre (avec acceptable = 9)
[1] [2] [3] ... [7] [8] [9]
..................  2  NA  2
..................  4  NA  4
..................  1  NA  1
..................  3 NA   4

..................  12 12  NA

..................  33 33  NA
..................  55 55  NA
..................  1  NA  1
..................  3  NA  4

 
 
Le probleme est l'extreme lenteur de cette boucle for, qui dure et dure et dure ...  Je souhaiterais modifier ce code avec une selection meilleure probablement offerte par R. Malheureusement je ne trouve pas de solution pour remplacer.  
 
Toute idee est la bienvenue.
 
Merci d'avance.

Message cité 1 fois
Message édité par Yvounet2 le 28-05-2010 à 16:57:28
Reply

Marsh Posté le 28-05-2010 à 16:55:17   

Reply

Marsh Posté le 02-06-2010 à 15:11:13    

Yvounet2 a écrit :

Bonjour,
 
J'ai besoin de mettre dans une colonne 8 de mon tableau des valeurs si elles repondent au critere :  Datapoints[[7]][jj] > acceptable  ou dans une colonne 9 si elles ne repondent pas au critere.
 
J'ai donc le code tres simple suivant et fonctionnant :
         for(jj in limMin:limMax){
    if( Datapoints[[7]][jj] > acceptable)
    {
         
       Datapoints[[8]][jj] <- Datapoints[[5]][jj]
         
       Datapoints[[9]][jj] <- NA

     }
       
    else  
    {
         
       Datapoints[[9]][jj] <- Datapoints[[5]][jj]
         
       Datapoints[[8]][jj] <- NA
 
    }

}
 
Me rend correctement quelque chose du genre (avec acceptable = 9)
[1] [2] [3] ... [7] [8] [9]
..................  2  NA  2
..................  4  NA  4
..................  1  NA  1
..................  3 NA   4

..................  12 12  NA

..................  33 33  NA
..................  55 55  NA
..................  1  NA  1
..................  3  NA  4

 
 
Le probleme est l'extreme lenteur de cette boucle for, qui dure et dure et dure ...  Je souhaiterais modifier ce code avec une selection meilleure probablement offerte par R. Malheureusement je ne trouve pas de solution pour remplacer.  
 
Toute idee est la bienvenue.
 
Merci d'avance.


 

Code :
  1. filter <- Datapoints[[7]][limMin:limMax] > acceptance
  2. Datapoints[[8]][limMin:limMax][filter] <- Datapoints[[5]][limMin:limMax][filter]
  3. Datapoints[[9]][limMin:limMax][filter] <- NA
  4. Datapoints[[9]][limMin:limMax][!filter] <- Datapoints[[5]][limMin:limMax][!filter]
  5. Datapoints[[8]][limMin:limMax][!filter] <- NA


 
Voilà c'est un petit bout de code sur un coin de table, mais je pense que c'est plus performant en R que la boucle for en vitesse, mais en mémoire je pense pas.


Message édité par Lan Wezel le 02-06-2010 à 15:12:36
Reply

Marsh Posté le 02-06-2010 à 15:32:05    

C'est parfait, merci beaucoup.  
Je n'arrivais pas à retrouver la syntaxe !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed