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 :

convertir un code du C à R


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut convertir un code du C à R
    Bonjour,

    J'ai un code en C et je n'arrive pas à l'écrire en R

    Voici le code en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
          cste = 1.0/(double)N ;
     
          for ( i = 2 ; i < (N-3) ; i++ )
    	{
    	  ang = 0.0 ;
    	  m = 0 ;
    	  for ( j = -1 ; j <= +3 ; j++ )
    	    {
    	      ang = ang + atan2 ( (arr[i+j]-arr[i+j-1]), ctse ) ;  /* normalisation */
    	      m = m + 1 ;
    	    }
     
    	  angle[i] = ang/(double)m ;   /* moyenne */
    	}
    Voici le code que j'ai tapé, mais malheureusement ça ne marche pas
    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
    am = function(data)
    {
    library(dagR)
    n          = length(data)
    cste       = 1.0/n
    angle      = NULL
    for(i in 3 : n-3)
    {
    bb = paste("b",i,sep="") 
    k = NULL 
    for (j in -1:3)
        {
         m=NULL
         aa = paste("a",j,sep="")
         k = c(m,assign(aa,atan2(data[i+j] - data[i+j-1],cste), pos=1))
        m=m+1
         }
      angle = c(angle,assign(bb,(k/m),pos=1))
    }
    return(angle)
    }
    Veuillez s'il vous plaît voir et m'aider à trouver une solution.
    Merci d'avance

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Si j'ai bien compris, vous souhaitez réécrire votre algorithme C en R ?

    A mon avis, vous vous compliquez la vie pour rien ! Je pense que les "assign" ne sont absolument pas indispensables, avez-vous vraiment besoin de garder ces éléments "en plus" ?

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonjour
    Si j'ai bien compris, vous souhaitez réécrire votre algorithme C en R ?
    Oui c'est ce que je veux
    A mon avis, vous vous compliquez la vie pour rien ! Je pense que les "assign" ne sont absolument pas indispensables,
    C'est ce que je pensais faire ou plutot l'idée que j'ai trouvée ...
    avez-vous vraiment besoin de garder ces éléments "en plus" ?
    Non je n'ai pas besoin des éléments "en plus"

    Pouvez-vous, s'il vous plaît, m'aider à améliorer le code que j'ai tapé ou me donner le code correct, avec un grand merci d'avance

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Re-bonjour,

    Je n'ai pas vérifié la "concordance" entre votre code R et votre code C, mais concernant votre code R, il ne manque pas grand chose pour que cela fonctionne à mon avis...

    Essayez de supprimer les "assign" pour voir ce que ça donne. Il restera ensuite quelques erreurs que vous devriez pouvoir corriger par vous-même en reprenant votre code ligne par ligne.

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Ok i'll try
    Et j'espère que je trouverais la solution
    Je vous transmettrais les résultats que je trouverais
    Cordialement B.H

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    j'ai essayé avec ce code :
    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
    am = function(data)
    {
    library(dagR)
    n          = length(data)
    cste       = 1.0/n
    angle      = NULL
    for(i in 3 : n-3)
    {
    bb = paste("b",i,sep="") 
    k = NULL 
    for (j in -1:3)
        {
         aa = paste("a",j,sep="")
         k = c(m,assign(aa,atan2(data[i+j] - data[i+j-1],cste), pos=1))
        }
      angle = c(angle,assign(bb,(k/5),pos=1))
    }
    return(angle)
    }
    Et çane marche toujours pas !
    Je ne sais pas pourquoi vous m'avez dit de supprimer les "assign"
    Je suis vraiment bloqué

  7. #7
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    La fonction "assign" vous sert uniquement ici (pour la première occurence) à sauver les valeurs atan2(data[i+j] - data[i+j-1],cste) dans les éléments "a1", "a2", ... de la boucle sur j.

    Or vous m'avez dit vous-mêmes (et on le voit dans votre code), que ces valeurs ne sont pas réutilisées par la suite. Vous n'avez donc pas besoin de les sauver dans un élément particulier !
    Il vous suffit simplement de compléter votre vecteur k par les valeurs de "atan" que vous souhaitez.

    Ensuite, il reste encore quelques coquilles dans votre code mais je vous laisser chercher !

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  8. #8
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonsoir
    J'arrive pas à le résoudre
    je sais pas mais je crois que vous avez bien compris le code et ce que je voudrais à travers.
    merci de me donner votre solution s'il vous plait.

    Cordialement B.H

  9. #9
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Le but du forum n'est pas de vous fournir une solution toute prête mais de vous conseiller afin de vous aider à trouver la solution à votre problème.

    Avez-vous déjà essayé d'écrire votre code en vous passant des "assign" comme je vous l'ai suggéré ? Une fois cela fait, si vous êtes toujours coincé, postez votre code et les éventuels messages d'erreur sur le forum.

    De plus, si vous prenez le temps de relire votre code attentivement (éventuellement en testant ligne par ligne), vous remarquerez quelques coquilles facilement corrigeables

    Bon courage et bonne continuation !


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  10. #10
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 94
    Points : 147
    Points
    147
    Par défaut
    Une solution de ce style devrait faire l'affaire
    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
     
     
    	x = rnorm(1000)
    	n = length(x)
    	cste = 1/length(x)
    	angle = vector()
     
    	for(i in 2:(n-3)){
    		ang = 0
    		m = 0
    		for(j in c(-1:3)){
    			ang = ang + atan2(x[i+j]-x[i+j-1],cste)
    			m = m + 1
    		}
    		angle = c(angle,ang/m)
    	}

  11. #11
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonsoir,
    Merci pour votre réponse

    J'explique ce que je veux faire à travers mon code ici (un exemple pourrait bien éclairer):

    pour i=2 (j in (-1:2)) et non (j in (-1:3))
    pour j = -1 on fait entre 1 et 0, puis pour j = 0 entre 2 et 1, puis pour j = 1 entre 3 et 2 puis pour j = 2 entre 4 et 3 ...

    donc ici je fais le calcul sur 5 points (0,1,2,3,4) et j'aurais 4 résultats.

    Je fais la moyenne de ces 4 résultats et je l'enregistre dans angle[1] et ainsi de suite ...

    Si l'on fait une boucle telle qu'indiquée dans le code, on ne calcule pas ni le premier point (i = 0), ni le second (i=1), ni l'avant-dernier (i = (N-1)), ni l'avant-avant-dernier (i = (N-2))..

    Ici dans R l'indice commence de 1 or en C il commence de 0.

    Donc dans mon code je crois que je dois commencer les i à partir de 3 et non de 2 et laisser la borne (n-3) telle qu'elle est (vous êtes d'accord avec moi ici ? )

    Voici ce que je voulais faire

    Je sais bien que votre objectif est de ne pas donner des solutions prêtes et de laisser toujours le temps pour penser et faire mieux, mais cette fois-ci je le demande amicalement parce que c'est pas ça mon but en fait de coder cet algo , c'est ne qu'une étape intermédiaire (j'ai besoin des résultats de cet algo dans un travail hors la programmation sur R).
    Je compte sur votre compréhension

    Merci d'avance

  12. #12
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    Donc dans mon code je crois que je dois commencer les i à partir de 3 et non de 2 et laisser la borne (n-3) t
    je suis pas doué en R mais non si tu décales au départ tu décales aussi à l'arrivée sinon t'auras une valeur de moins...logique
    donc va jusqu'à n-2.

  13. #13
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    Ici comme je vous ais dis en C on commence par 0 or en R on commence à partir de 1, c'est ma première remarque.
    la deuxième vous avez parler de (n-2) et (n-3), je vous ais dit
    pour i=2 (j in (-1:2)) et non (j in (-1:3))
    donc les bornes qui me conviennent sont [1:n-3]
    Si non merci pour votre solution proposé, c'est celle que je recherche

    Bonne journée

  14. #14
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    désolé j'ai du mal comprendre la question.
    je ne connais pas le but de ton code ma remarque était juste de dire de manière générale que logiquement si un code dans C va de 0 à n-3 alors dans R il va de 1 à n-2.
    sinon c'est que tu n'as pas le même nombre d'éléments et donc que tu ne fais pas la même chose...

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

Discussions similaires

  1. [VBA-E] Convertir du code VBA 2000 en VBA 97
    Par Mykeul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2006, 11h05
  2. [Free Pascal] Convertir un code ASCII en entier
    Par JoseF dans le forum Free Pascal
    Réponses: 13
    Dernier message: 04/04/2006, 19h30
  3. Convertir du code
    Par K.othmane dans le forum Langage
    Réponses: 4
    Dernier message: 06/02/2006, 16h24
  4. Convertir du code ASM 68020 en C++
    Par )3lade dans le forum Linux
    Réponses: 5
    Dernier message: 13/01/2006, 10h03
  5. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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