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 :

Explication concernant apply() [Débutant(e)]


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut Explication concernant apply()
    Bonjour,

    Je suis débutant en programmation et je ne parviens pas à utiliser correctement la fonction apply().

    ?apply ne m'a pas assez éclairé pour pouvoir remplacer mes boucles for dans tous les cas.

    Voici un exemple très basique de ce que je n'arrive pas à faire avec apply (égal à mat<-matrice)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #1er tableau
    num<-c(1:5)
    Un <- c(3,"3W",10,5,5)
    Deux<-c(5,10,5,3,1)
    Trois<-c(4,4,4,4,3)
    matrice <- matrix(c(num,Un,Deux,Trois), nrow=5, ncol=4)
    #2eme tableau
    mat <- matrix(0, nrow=5, ncol=4)
    #duplication de matrice dans mat
    for (i in 1:nrow(matrice))
    {
    mat[i,]<-matrice[i,]
    }
    Quelqu'un pourrait-il m'expliquer ?

    Un grand merci par avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Le pdf de Vincent Goulet est très bien fait pour comprendre les fonctions apply (voir le chapitre 6).

    http://cran.r-project.org/doc/contri...ammation_R.pdf

    HTH

    Vincent

    PS : d'ailleurs, il serait intéressant de le rajouter sur la page d'accueil de r.developpez

  3. #3
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Ce lien va m'être très utile...

    Mais malgré sa lecture ainsi que celle d'autres tutos, je n'arrive toujours pas à remplacer mes boucles for concernant l'exemple de mon post.
    Pour ce qui est de faire une addition de lignes ou de colonnes, je suis au top mais pas pour remplacer les valeurs d'une seule colonne d'un tableau par celles d'une autre colonne d'un autre tableau en y rajoutant un calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apply(matrice,1,function(x){matrice[,1]+1})
    Erreur dans matrice[, 1] + 1 :
    argument non numérique pour un opérateur binaire
    Certes, je ne suis pas doué, mais j'aurais au moins essayé...

    Sinon, puisque vous parlez de rajouter des tutos sur le forum, il pourrait être pratique de créer une sorte d'annuaire des réponses de R face à ce genre d'erreur de débutant ou d'étourderies. Un moteur de recherche trouverait facilement la page, et l'utilisateur trouverait sa réponse sans passer pour un boulet

    Cordialement.

    B65

  4. #4
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Je n'aime pas la fonction apply. Je préfère les autres et surtout lapply et sapply. Voici un exemple :

    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
    # Création d'un matrice
    matrice <- matrix(1:10, 2, 5)
     
    # But : multiplier chaque élément par deux
    # Solution évidente
    matrice2 <- matrice * 2
     
    # Boucle for
    matrice2 <- matrix(0, 2, 5)
    for (i in 1:ncol(matrice)) {
     matrice2[, i] <- matrice[, i] * 2
    }
     
    # sapply
    matrice2 <- sapply(1:ncol(matrice), function(i) {
     matrice[, i] * 2
    })
    En bref, ce que vous mettez dans "for(...)" se retrouve en premier argument de sapply et le "corps" de la boucle se retrouve dans une fonction. L'assignation ne se fait plus dans le "corps" puisqu'on utilise une fonction (scope, variables locales, globales...) mais en tant que résultat de la fonction sapply. Dans cet exemple, je sais plus ou moins que sapply va me renvoyer une matrice donc ça me suffit.

    HTH

    Vincent

  5. #5
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Merci pour votre aide. Entre vos explications et le lien que vous avez transmis, je pense avoir de quoi avancer un bon moment.

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

Discussions similaires

  1. Demande d'explication concernant du code
    Par matinho dans le forum ASP.NET
    Réponses: 7
    Dernier message: 10/03/2009, 16h01
  2. Réponses: 3
    Dernier message: 29/10/2008, 15h37
  3. Explications concernant deux compteurs de performances
    Par Immobilis dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 29/02/2008, 17h41
  4. explication concernant UserForm
    Par Lelie dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/12/2007, 16h27
  5. Explication concernant le sous-forum Autres et le forum Bibliothèques
    Par hiko-seijuro dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 23/06/2007, 00h54

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