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 :

Utilisation de apply


Sujet :

R

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut Utilisation de apply
    Bonjour,

    j'aimerai comprendre comment fonctionne apply. Je sais que c'est beaucoup plus performant que de faire des boucle en R, mais je n'arrive pas à l'utisiler.

    Je voudrai, pour chaque ligne de ma matrice, soustraire la moyenne de la ligne et diviser par l'ecart tye de la ligne à toute les cases de la ligne. J'espere que c'est clair...
    Et j'aimerai donc le faire avec un apply, parce qu'il s'agit de très grosse matrice, et qu'un for est beaucoup trop long.

    merci de votre aide

  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 : 44
    Localisation : France, Finistère (Bretagne)

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

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

    Effectivement, c'est plus efficace (pour de gros jeux de données tu sens la différence) mais tellement moins intuitif.

    Bon je te donne le code et on décortique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > m <- matrix(c(1, 0, 2, 3, 5, 1, 0, 4, 9), nrow=3)
    > m
         [,1] [,2] [,3]
    [1,]    1    3    0
    [2,]    0    5    4
    [3,]    2    1    9
    > t(apply(m, 1, function(x){(x-mean(x))/sd(x)}))
               [,1]       [,2]       [,3]
    [1,] -0.2182179  1.0910895 -0.8728716
    [2,] -1.1338934  0.7559289  0.3779645
    [3,] -0.4588315 -0.6882472  1.1470787
    Le premier argument c'est bien sûr ta matrice.
    Le second indique si tu travailles par ligne (1), par colonne (2) ou bien les deux séquenciellement (c(1, 2)).
    Le troisième argument, c'est la fonction. L'argument x qu'elle reçoit c'est dans ce cas-ci la ligne.

    J'ai du mettre le tout dans une fonction t() (transposition) car les résultats sont mis en colonnes de la matrice renvoyée.

    Après, il y a moyen de faire plus simple, le centrage et la réduction sont déjà implémentés dans la fonction scale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > t(apply(m, 1, scale))
               [,1]       [,2]       [,3]
    [1,] -0.2182179  1.0910895 -0.8728716
    [2,] -1.1338934  0.7559289  0.3779645
    [3,] -0.4588315 -0.6882472  1.1470787
    > scale(m[3, ])      # Pour montrer qu'on a bien raison d'utiliser t()
               [,1]
    [1,] -0.4588315
    [2,] -0.6882472
    [3,]  1.1470787
    Tous les arguments qui pourraient venir en 4ème et plus position sont des arguments (optionnels souvent) passés à la fonction.
    Par exemple center=FALSE si tu veux seulement réduire (voir ?scale).
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut merci :)
    Merci beaucoup pour cette réponse très claire, que je vais concervée précieusement!! Je n'arrivais pas a faire le fonction, ne savais pas comment utiliser X.
    Et puis, en R, ce n'est pas toujours facile de trouver de la documentation.
    Et puis, merci pour scale que je ne connaissais pas non plus

  4. #4
    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 : 44
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    De rien !

    Toutes les fonctions sont en principe auto-documentées. Mais faut reconnaître que c'est parfois minimaliste (et monoglotte anglais) !
    Je te conseille vivement de regarder les exemples des différents types de apply, en particulier tapply et sapply/lapply.
    C'est fonctions sont, comme je le disais, absolument pas intuitives, mais quand tu les maîtrises, tu peux réellement gagner des heures de calcul (il m'est arrivé en optimisant du code R de passer de plusieurs heures d'itération à quelque chose de l'ordre de la dizaine de minutes !).
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

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

Discussions similaires

  1. GTKassistant: Utilisation de apply et prepapre
    Par alexglvr dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 15/10/2009, 10h26
  2. Creation dll et utilisation dans appli C#
    Par moulefrite dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/08/2008, 09h46
  3. [Debutant]Personne qui utilise l'appli.
    Par brak__ dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2007, 22h24
  4. [Runtime] comment utiliser une appli sans access
    Par Zetophe dans le forum Runtime
    Réponses: 3
    Dernier message: 24/04/2007, 13h31
  5. Réponses: 2
    Dernier message: 22/03/2007, 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