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 :

Travail avec des vecteurs (rentabilité)


Sujet :

R

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Par défaut Travail avec des vecteurs (rentabilité)
    Bonjour,

    J’aimerais savoir comment, à partir d’un vecteur je peux obtenir un autre vecteur dont chaque valeur est calculée en utilisant deux valeurs du vecteur de départ.
    Concrètement, j’ai une liste de cours boursiers sous la forme d’un vecteur du type c(x1,x2,x3,x4,x5) (avec quelques 500 valeurs) ,et j’aimerais obtenir un vecteur des rentabilités avec les valeurs (x2-x1)/x1, (x3-x2)/x2 etc,

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Tu dois pouvoir tenter quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sapply(2:length(vecteur),
           function(i)
       {
           (vecteur[i] - vecteur[i-1]) / vecteur[i-1]
       })

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut
    Bonjour,

    Peut-être aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (vect[2:n] - vect[1:(n-1)]) / vect[1:(n-1)]
    mais ça implique probablement deux boucles O(n).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Par défaut
    Citation Envoyé par pitipoisson Voir le message
    Bonjour,

    Tu dois pouvoir tenter quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sapply(2:length(vecteur),
           function(i)
       {
           (vecteur[i] - vecteur[i-1]) / vecteur[i-1]
       })
    Super, merci beaucoup!

  5. #5
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Citation Envoyé par Ulath0 Voir le message
    Peut-être aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (vect[2:n] - vect[1:(n-1)]) / vect[1:(n-1)]
    mais ça implique probablement deux boucles O(n).
    Suis-je donc bête ?
    Oui bien sûr, c'est beaucoup plus naturel et efficace (besoin d'aucune boucle en fait, c'est de la simple vectorisation) !

    En écriture compacte et généralisée, ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (vect[2:length(vect)] - vect[1:(length(vect)-1)]) / vect[1:(length(vect)-1)]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut
    Hum il y a quand même deux boucles derrières (en C) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    res=Ralloc(n, ...)
    for (i=0; i<n-1; i++) res[i] = v[i+1]-v[i]
    for (i=0; i<n-1; i++) res[i] = res[i]/v[i]
    return res;
    Alors que dans ta soluce (si sapply transcrit le code en C, je sais pas si c'est le cas), il n'y a qu'une boucle avec soustraction+division en même temps. Enfin c'est ça que je voulais dire :-)

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

Discussions similaires

  1. Travailler avec des gifs animés
    Par Commodore dans le forum Imagerie
    Réponses: 1
    Dernier message: 13/07/2006, 15h58
  2. Réponses: 8
    Dernier message: 09/03/2006, 17h48
  3. Travailler avec des hexadécimaux
    Par LEK dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 18/09/2005, 04h24
  4. Réponses: 3
    Dernier message: 25/01/2005, 11h27
  5. Travailler avec des bits
    Par Vulvulune dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2003, 19h09

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