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 :

Fonction "rcorr": Afficher 3 chiffres après la virgule


Sujet :

R

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut Fonction "rcorr": Afficher 3 chiffres après la virgule
    Bonjour à tous,

    j'utilise la fonction rcorr du package "Hmisc". ce dernier permet d'afficher la matrice des corrélations et la matrice des p-values. Y'a-t-il une possibilité d'afficher plus de 2 chiffres après la virgule pour la matrice des corrélations d'une part? d'autre part, pour la matrice des p-values, la fonction affiche un 0.000 pour les valeurs très faibles, serrait-t-il possible d'afficher ces valeurs sous la forme 2.3e-11 par exemple.

    bien sûr, si il existe d'autres fonctions ou packages qui répondent à ma problématique ou plus performants, n'hésitez pas à m'en faire part.

    Bonne journée.

  2. #2
    Membre actif Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Points : 200
    Points
    200
    Par défaut
    bonjour,

    probablement avec la fonction format https://stat.ethz.ch/R-manual/R-deve...ml/format.html ?

    bne journée

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    La solution la plus simple est de réécrire la fonction print.rcorr avec les formats voulus et de la mettre dans son espace de travail.

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    Bonjour et merci pour les propositions,

    Cependant je n'arrive pas au résultats souhaité, c'est surement dû au fait que je ne suis pas familier avec les arguments de ces fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    t<-rcorr(as.matrix(msilajuly)
    s<-format(t, nsmall=5) #là j'utilise l'argument nsmall
    s<-format(t, digits=5) #là j'utilise l'argument digits
    avec la fonction format() j'obtiens effectivement le nombre de décimaux souhaité mais je perds le format matrice ce qui rend le résultat illisible. et puis bizarrement les 2 argument donnent le même résultat.

    avec la fonction print.rcorr () je n'obtiens aucun résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    > t<-rcorr(as.matrix(msilajuly))
    > s<-print.rcorr(t, digits=5)
    cordialement

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Dans ma réponse, je proposais de réécrire la fonction print.rcorr qui est la fonction appelée quand on affiche le résultat de rcorr, objet de type S3 et de classe rcorr. Ce que tu fais est d'appeler cette fonction (le .rcorr étant inutile) en lui donnant des arguments qui n'existent pas dans la fonction d'origine. Je n'ai pas la place ici d'expliquer le mécanisme mais tu trouveras facilement sur la toile des documents qui l'expliquent, il en existe même en français. La fonction réécrite pourrait avoir la forme :
    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
     
    print.rcorr <- function (x, digits=2, p.max=1e-04, p.digits=4, ...) 
    {
        print(round(x$r, digits))
        n <- x$n
        if (all(n == n[1, 1])) 
            cat("\nn=", n[1, 1], "\n\n")
        else {
            cat("\nn\n")
            print(n)
        }
        cat("\nP\n")
        P <- x$P
        P <- ifelse(P < p.max, 0, P)
        p <- format(round(P, p.digits))
        p[is.na(P)] <- ""
        print(p, quote = FALSE)
        invisible()
    }
    Il suffit de modifier les arguments pour en modifier le comportement par défaut. Pour modifier un seul argument, voir aussi la doc sur la syntaxe de R et l'appel d'une fonction en passant les arguments par nom et non par position comme dans beaucoup de langages.

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    Bonsoir Faubry,

    La solution la plus simple est de réécrire la fonction print.rcorr
    je vois que tu à le sens de l'humour.

    Ce que tu me propose là, est complétement nouveau pour moi, si j'ai bien compris tu me demande de créer des arguments qui n'existent pas dans la fonction rcorr. Décidément ce R à plus d'un tour dans son sac. Je t'avoue que ton code là je ne l'ai pas du tout compris mais je vais essayer de le déchiffrer en révisant les tuto sur la syntaxe de R d'une part et chercher des tuto sur la création ou la réécriture de fonction et je vous tien au courant.

    Bonne soirée.

  7. #7
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Désolé, il n'y a aucun humour. Le problème de l'apprentissage de R (comme d'ailleurs d'autres langages comme Java) est que les cours font généralement croire qu'il existe un standard universel de langage, actuellement C ou C++ et ils oublient de parler des véritables bases de R, en premier lieu que c'est un logiciel totalement ouvert, c'est-à-dire qu'on a accès au code de toutes les procédures, que c'est un langage avec de larges ressemblances avec les langages fonctionnels et les langages objets et que l'affichage par défaut passe par une fonction implicite print (c'est aussi, par exemple, pour cela que l'affichage de summary diffère d'un objet à un autre), qu'il y a plusieurs façons de passer des arguments à une fonction, que ceux-ci sont évalués que quand on en a besoin, voir le code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ft <- function( x, y=sqrt( -x)) if( x < 0) y else sqrt( x)
    On peut en effet vérifier que ne génère pas d'erreur pas plus que par contre nous dit que l'argument x est manquant.

    Quelques points supplémentaires :
    Une fonction peut avoir des arguments anonymes en nombre variable. Ceux-ci sont alors codés par le symbole spécial ... (cf. la fonction list). Elle peut aussi mélanger les deux types d’arguments. Dans ce cas, les arguments anonymes peuvent être listés en premier comme dans la fonction max, en dernier (cf. apply) ou au milieu des arguments (cf. aggregate).
    Cette dernière option est possible car si les arguments peuvent être passés à la fonction par position comme dans la majorité des langages informatiques et comme dans l’appel suivant à la fonction lm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    form <- ...
    don <- read.table( arguments)
     lm( form, don)
    form est obligatoirement une formule et don un data.frame puisque c’est dans cet ordre qu’ils sont définis dans la signature de la fonction. Ils peuvent aussi être passés par nom. Dans ce cas, l’ordre est quelconque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lm( data=don, formula=form)


    On passe généralement par position le premier argument de la fonction qui peut avoir un rôle spécial (cf. la notion de méthode) tandis que les autres arguments sont passés soit par identificateur :
    soit par position.
    Les arguments peuvent aussi avoir des valeurs par défaut qui sont codés de la forme :

    nomDeLArgument=valeurParDefaut

    dans la signature de la fonction. On appelle signature d’une fonction la ligne qui définit ses arguments et leur type ainsi que le type de retour. C’est donc la signature de la fonction qui est donnée dans l’aide.

    La valeur par défaut peut être une valeur immédiate (un nombre, une chaîne de caractères, une fonction…) ou une fonction des arguments précédemment définis (cf. l’argument scores de la fonction contr.poly).


    cat est une fonction plus générale que print (qui est une méthode, c'est-à-dire qui à un code par défaut de nom nomMethode.default et un code spécifique par type d'objet nomMethode.nomClasse pour les objets de type S3 alors qu'on l'appelle par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomMethode( objet, autresArguments)
    . C'est aussi le cas pour, entre autres, plot, summary, View, anova, Anova, et bien d'autres.

    invisible est une fonction spéciale qui peut s'employer avec un argument et qui doit être la dernière expression avec le retour de la fonction, si on l'utilise. Son comportement provoque un effet de bord de l'affichage, elle inhibe l'affichage à la console si la valeur retournée n'est pas stockée dans un objet de l'environnement d'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fi <- function( x) invisible( x)
    fi( 12)
    z <- fi( -12)
    z
    (fi( 12)) # equivalent a 
    print( fi( 12))
    Enfin, deux derniers points concernant les fonctions.
    1) le retour d'une fonction est la dernière valeur évaluée avant le retour, d'où généralement l'inutilité de l'appel à la fonction return() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fs <- function( x) sqrt( x)
    2) Dans le corps d'une fonction ou d'un script, l'affichage par défaut est inhibé, il faut aire appel à print ou cat pour avoir un affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fs <- function( x) {sqrt( x); x}
    # a comparer avec 
    fs <- function( x) {print( sqrt( x)); x}
    J'espère que ces quelques points peuvent t'être utiles.

  8. #8
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    ...

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    Merci Faubry pour ces éclaircissements et explications sur les différentes fonctions et arguments impliqués dans le code que tu m'a proposé.

    je te donne un retour dés que j'aurais un résultat.

    Cordialement

  10. #10
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    La proposition de Faubry est excellente, et te permettra sûrement de résoudre pas mal de futurs problèmes.
    Maintenant pour ta question initiale, ça me semble un poil sur-dimensionné.
    En stockant le résultat de rcorr dans un objet, on voit que c'est de type "rcorr" mais que c'est une liste. Entre autres éléments, cette liste contient "r", la matrice de corrélations proprement dite.
    En faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    round(objet.resultat.de.rcorr[["r"]],3)
    on l'affiche avec 3 décimales.
    Les doubles crochets permettent de renvoyer la matrice et pas une liste contenant une matrice, que round ne traiterait pas.
    On pourrait écrire aussi ça avec un $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    round(objet.resultat.de.rcorr$r,3)
    mais je préfère personnellement garder la syntaxe $ pour le cas particulier des data.frames, affaire de goût personnel.
    Bon courage.
    Olivier

Discussions similaires

  1. Afficher 3 chiffres apres la virgule
    Par Vincinho dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/01/2010, 15h04
  2. Afficher n chiffres après la virgule en J2ME
    Par willou54 dans le forum Java ME
    Réponses: 1
    Dernier message: 12/05/2008, 13h09
  3. Réponses: 7
    Dernier message: 23/01/2008, 17h15
  4. Réponses: 5
    Dernier message: 19/06/2007, 08h59
  5. Commande pour afficher des chiffres apres la virgule
    Par manar dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/09/2004, 18h28

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