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 :

Boucle for avec vecteur + warning "number of items to replace is not a multiple of replacement length"


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Par défaut Boucle for avec vecteur + warning "number of items to replace is not a multiple of replacement length"
    Bonjour,

    J'ai un vecteur temps et un vecteur cause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    time<-c(5,6,7,8,9,12,13,15,16,20,22,23)
    cause<-c(1,0,1,2,0,0,1,2,1,0,0,2)
    Je souhaiterais récupérer au moyen d'une boucle for (car il peut y avoir plus de 2 causes) un vecteur temps pour chaque cause. C'est à dire un vecteur time_cs1 correspondant au temps où la cause est de 1 (à savoir : 5, 7, 13, 16) et un vecteur time_cs2 correspondant au temps où la cause est de 2 (à savoir : 8, 15, 23).

    Voilà le code sans boucle qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      i=1
      time_cs1<-unique(time[cause==i])
      i=2
      time_cs2<-unique(time[cause==i])
    Qui donne les résultats suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >   time_cs1
    [1]  5  7 13 16
    >   time_cs2
    [1]  8 15 23
    Quand je passe à la boucle for avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      time_cs=NULL
     
      for (i in 1:max(cause)){
        time_cs[i]<-unique(time[cause==i])
      }
    J'obtiens le warning suivant et mes vecteurs time_cs1 et time_cs2 qui sont "not found".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning messages:
    1: In time_cs[i] <- unique(time[cause == i]) :
      number of items to replace is not a multiple of replacement length
    2: In time_cs[i] <- unique(time[cause == i]) :
      number of items to replace is not a multiple of replacement length
    Pouvez-vous m'indiquer comment corriger ma boucle for ? Merci par avance pour aide.

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Par défaut
    Ça ne répond pas totalement à la question, mais une autre façon de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    seltime<-list()
    for(j in 1:max(cause)){
      tmp<-NULL
      for(i in 1:length(cause)){
        if(cause[i]==j) tmp<-c(tmp,time[i])
      }
      seltime[[j]]<-tmp
    }
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > seltime
    [[1]]
    [1]  5  7 13 16
     
    [[2]]
    [1]  8 15 23

  3. #3
    Membre chevronné
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Par défaut
    Bonjour,

    Il ne faut pas passer par une boucle mais utiliser la fonction tapply.
    tapply(x,y,fun) applique la fonction fun au vecteur x pris sur chaque modalité de y.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     tapply(time,cause,unique)

    $`0`
    [1] 6 9 12 20 22


    $`1`
    [1] 5 7 13 16


    $`2`
    [1] 8 15 23

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Par défaut
    Bonjour Sengar et merci pour ta réponse.

    Donc pour ensuite utiliser ces objets j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    time_cs[[2]]
    time_cs[[3]]

Discussions similaires

  1. [VBA] Boucle "For" avec valeurs spécifiques
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 13
    Dernier message: 28/03/2025, 09h10
  2. Boucle for avec saut
    Par michel71 dans le forum Delphi
    Réponses: 3
    Dernier message: 25/02/2007, 16h16
  3. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18
  4. Réponses: 2
    Dernier message: 28/08/2006, 18h17
  5. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12

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