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 :

aide pour "fonction comptage"


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut aide pour "fonction comptage"
    Bonjour,
    Je me donne un vecteur X de points sur [0,1] et un nombre D d'intervalles.

    Voici mon programme; je note N_(j+1) le nombre de X_i qui tombent dans l'intervalle I_j=[(j-1)/D,j/D]. Quelqu'un peut-il me dire où est l'erreur?
    N est le vecteur qui contient le nombre de points que contient chaque intervalle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    comptage<- function(X,D){
    Y<-sort(X)
     
    N<-numeric(D+1)
    N[1]<-0
    s<-0
    k<-1
    for(j in 1:D){
    	while((j-1)/D <= Y[k] & Y[k]<j/D){k<-k+1}
    	N[j+1]<-k-1-s
    	s<-s+N[j+1]
    	}
    }

    L'erreur suivante s'affiche alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans while ((j - 1)/D <= Y[k] & Y[k] < j/D) { : 
      valeur manquante là où TRUE / FALSE est requis

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 292
    Par défaut
    Bonjour,

    l'indice k dépasse la taille de la liste Y, donc Y[k] renvoie NA donc la comparaison devient aussi NA et while renvoie ton erreur.
    pour s"en assurer il suffit d'afficher k dans la boucle.

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Bien vu!
    Du coup je vais faire tourner ma boucle de j=1 à D-1. Ensuite je peux écrire N[D+1]=length(Y)-s. Et j'ai mon vecteur N!

    Merci beaucoup!


    Citation Envoyé par Gakusei Voir le message
    Bonjour,

    l'indice k dépasse la taille de la liste Y, donc Y[k] renvoie NA donc la comparaison devient aussi NA et while renvoie ton erreur.
    pour s"en assurer il suffit d'afficher k dans la boucle.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 292
    Par défaut
    Je pense qu'il faut revoir ton script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    N[j+1]<-k-1-s
    s<-s+N[j+1]
    <=>
    N[j+1]<-k-1-s
    s<-k-1
    Il faut que tu définisses bien le rôle de chaque variable.

    J'ai simplifié ton code
    avec interval les bornes supérieures de ton intervalle
    et cmpt l'indice des intervalles:
    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
    comptage<- function(X,D){
      Y<-sort(X)
      interval=1:D/D
      k=0
      s=1
      cmpt=1
      N=interval*0
      for(j in interval){
        print(paste("intervalle:",j))
        while(Y[k+s]<j & (k+s)< length(Y)){k<-k+1; }
        print(paste("nmbre de valeurs:",k))
        N[cmpt]=k
        s<-s+k
        k=0
        cmpt=cmpt+1
      }
      return(N)
    }

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

Discussions similaires

  1. aide pour des fonctions
    Par sharpeye dans le forum ASP
    Réponses: 2
    Dernier message: 11/04/2006, 09h25
  2. Réponses: 15
    Dernier message: 26/03/2006, 12h10
  3. Réponses: 4
    Dernier message: 13/03/2006, 15h21
  4. Aide pour une fonction
    Par mimi060101 dans le forum Scheme
    Réponses: 1
    Dernier message: 24/02/2006, 16h59

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