Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    janvier 2012
    Messages
    122
    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 : 122
    Points : 34
    Points
    34

    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 :
    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 expérimenté
    Homme Profil pro Vincent Chouraki
    MD, PhD, post-doc
    Inscrit en
    juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Chouraki
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : MD, PhD, post-doc
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2010
    Messages : 185
    Points : 540
    Points
    540

    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
    Nouveau Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    janvier 2012
    Messages
    122
    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 : 122
    Points : 34
    Points
    34

    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 :
    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 expérimenté
    Homme Profil pro Vincent Chouraki
    MD, PhD, post-doc
    Inscrit en
    juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Chouraki
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : MD, PhD, post-doc
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2010
    Messages : 185
    Points : 540
    Points
    540

    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 :
    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
    Nouveau Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    janvier 2012
    Messages
    122
    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 : 122
    Points : 34
    Points
    34

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •