web-dev-qa-db-fra.com

Imprimer de jolies data.frames/tables sur la console

Est-il possible d’imprimer le petit data.frames sur la console de manière plus lisible?

Par exemple, serait-il possible de générer sur la console:

library(MASS)   
iris[1:5, ]

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa

comme

iris[1:5, ]

  +--------------+-------------+--------------+-------------+---------+
  | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
  +--------------+-------------+--------------+-------------+---------+
1 |          5.1 |         3.5 |          1.4 |         0.2 |  setosa |
2 |          4.9 |         3.0 |          1.4 |         0.2 |  setosa |
3 |          4.7 |         3.2 |          1.3 |         0.2 |  setosa |
4 |          4.6 |         3.1 |          1.5 |         0.2 |  setosa |
5 |          5.0 |         3.6 |          1.4 |         0.2 |  setosa |
  +--------------+-------------+--------------+-------------+---------+

Je réalise que pour data.frames grand, cela prendrait un temps inutile, mais si c'est une option, j'aimerais pouvoir examiner les petits cadres de manière plus structurée. 

En particulier, lorsque j'ai deux champs de texte l'un à côté de l'autre, il serait beaucoup plus facile de les séparer entre deux champs, car l'espacement entre les mots a la même taille que l'espacement entre les colonnes.

Merci

14
Akhil Nair

Au cas où cela aiderait quelqu'un, je viens de trébucher sur le fait que knitr's kable réalise une jolie jolie impression. Combinez avec certaines des suggestions de .Rprofile ci-dessus, cela semble réaliser ce que j'avais en tête.

> knitr::kable(head(iris))

| Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species |
|------------:|-----------:|------------:|-----------:|:-------|
|          5.1|         3.5|          1.4|         0.2|setosa  |
|          4.9|         3.0|          1.4|         0.2|setosa  |
|          4.7|         3.2|          1.3|         0.2|setosa  |
|          4.6|         3.1|          1.5|         0.2|setosa  |
|          5.0|         3.6|          1.4|         0.2|setosa  |
|          5.4|         3.9|          1.7|         0.4|setosa  |
17
Akhil Nair

J'ai eu le même problème récemment et suis tombé sur le paquet huxtable. Il est très flexible et peut-être un peu excessif pour une sortie de console plus agréable, mais cela m’a très bien servi.

Voici comment résoudre votre problème avec huxtable:

library(huxtable)
library(magrittr)

small_iris <- iris[1:5, ]

iris_hux <- 
  hux(small_iris) %>% 
  add_colnames() %>% 
  set_bold(row = 1, col = everywhere, value = TRUE) %>% 
  set_all_borders(TRUE)

Je pense que toutes les fonctions parlent d'elles-mêmes. Pour une introduction complète, voir https://hughjonesd.github.io/huxtable/huxtable.html#adding-row-and-column-names .

print_screen(iris_hux) donne cette sortie (dans la console!):

 enter image description here

_ {Je n'ai pas encore compris comment supprimer les informations du bas sur les noms des colonnes. Si quelqu'un le sait, merci de le commenter!}

EDIT: Pour supprimer les noms de colonne en bas, utilisez colnames = FALSE dans print_screen().

4
der_grund

Vous pouvez essayer plusieurs méthodes.

  1. Ajoutez quelques fonctions d’aide à votre .Rprofile. Dans mon profil, j'ai

    hh = function(d) 
       if(class(d)=="matrix"|class(d)=="data.frame") d[1:5,1:5]
    

    Cette fonction imprime le coin supérieur gauche du bloc de données. j'ai aussi

    ht = function(d, n=6) rbind(head(d, n), tail(d,n))
    
  2. Créez votre propre fonction d'impression S3 pour les trames de données, par exemple. 

    print.data.frame = function(x, ..., digits = NULL, 
                            quote = FALSE, right = TRUE, 
                            row.names = TRUE) 
                        message("hi")
    
  3. Utilisez un package, par exemple dplyr. Cependant, c'est un peu exagéré si tout ce que vous voulez, c'est une belle impression.

3
csgillespie

Si vous êtes également disposé à imprimer votre sortie dans le volet de visionneur (RStudio) plutôt que sur la console, je vous recommande d'utiliser le package DT.

library(DT)
datatable(iris)

Cela présente plusieurs avantages, je pense: la sortie est jolie et bien agencée, le package est capable d’afficher des trames de données volumineuses sans devenir encombrant et il est hautement personnalisable de démarrer.

 enter image description here

0
tifu