Crédits photo : geralt
Voici un post pour vous montrer quelques fonctions qui permettent de gérer l’affichage, en termes de nombre de décimales (le nombre de chiffres après la virgule) et de notation scientifique, des sorties R. Je vous parlerai ensuite de quelques fonctions très utiles pour gérer l’arrondi des nombres.
Le nombre de décimales et la notation scientifique des nombres affichés par R peuvent se gérer à partir de la fonction options() et de ses arguments “digits” pour le nombre de décimales (nombre de chiffres après la virgule), et “scipen” pour la notation scientifique.
Par défaut, ces arguments sont fixés à digits=7 et scipen=0.
options( "digits"=7, "scipen"=0)
Ceci permet un affichage par défaut de 7 chiffres après la virgule, et d’afficher les chiffres selon une notation, scientifique ou non, identique à leur format d’entrée.
Par exemple, si les données sont entrées en utilisant une notation scientifique, alors R utilisera aussi une notation scientifique lors de leur affichage :
x1 <- c(1.52e+10, 5.498e+8, 7.22e-05)
x1
## [1] 1.520e+10 5.498e+08 7.220e-05
De même, si les données sont entrées sans utiliser de notation scientifique, alors R n’utilisera pas non plus de notation scientifique lors de leur affichage :
x2 <- c(0.7950132,11.49269,104.6323)
x2
## [1] 0.7950132 11.4926900 104.6323000
Sans surprise, il suffit de modifier la valeur de l’argument “digits”:
x2
## [1] 0.7950132 11.4926900 104.6323000
options( "digits"=3)
x2
## [1] 0.795 11.493 104.632
Pour cela, on va utiliser la valeur -100 au niveau de l’argument “scipens” :
x2
## [1] 0.795 11.493 104.632
options("scipen"=-100)
x2
## [1] 7.95e-01 1.15e+01 1.05e+02
Pour cela, on va utiliser la valeur 100 au niveau de l’argument “scipens” :
# options par défaut
options( "digits"=7, "scipen"=0)
x1
## [1] 1.520e+10 5.498e+08 7.220e-05
options( "scipen"=100)
x1 ## [1] 15200000000.0000000 549800000.0000000 0.0000722
Les fonctions format() et formatC() peuvent également être utilisées, mais elles réalisent un formatage de la donnée. Ainsi, la donnée de type numérique, devient de type “chaîne de caractères”.
# options d'affichage par défaut
options( "digits"=7, "scipen"=0)
x1
## [1] 1.520e+10 5.498e+08 7.220e-05
format(x1, scientific=FALSE, digits=3)
## [1] "15200000000.0000000" " 549800000.0000000" " 0.0000722"
x2
## [1] 0.7950132 11.4926900 104.6323000
format(x2, scientific=TRUE, digits=3)
## [1] "7.95e-01" "1.15e+01" "1.05e+02"
formatC(x2, format = "e", digits = 4)
## [1] "7.9501e-01" "1.1493e+01" "1.0463e+02"
Les données étant formatées en “chaîne de caractères”, il n’est plus possible de réaliser des opérations mathématiques:
x1
x1+1
x1C <- formatC(x1, format = "e", digits = 4)
x1C+1
#Error in x1C + 1 : argument non numérique pour un opérateur binaire
Différentes fonctions peuvent être employées pour arrondir un chiffre ; les principales sont :
– round()
– signif()
– floor()
– celiling()
– trunc()
Cette fonction prend en argument les données à arrondir, et le nombre de décimales (nombre de chiffres après la virgule) souhaitées. Par exemple, ici, je souhaite arrondir les données du vecteur x1, à deux chiffres après la virgule :
# options par défaut
options( "digits"=7, "scipen"=0)
x1 <- c(0.7950132,11.49269,104.6323)
x1
## [1] 0.7950132 11.4926900 104.6323000
round(x1,2)
## [1] 0.80 11.49 104.63
La fonction round() arrondi définitivement vos données. Dans l’exemple suivant, j’assigne à l’objet x3 les valeurs arrondies à deux décimales des données contenues dans le vecteur x1. Même si j’augmente le nombre de décimales de l’affichage, les données de x3 contiendront toujours deux décimales, alors que l’objet x1 continue de garder toute l’information.
x3 <- round(x1,2)
x3
## [1] 0.80 11.49 104.63
options("digits"=5)
x3
## [1] 0.80 11.49 104.63
x1
## [1] 0.79501 11.49269 104.63230
Pour obtenir des chiffres significatifs, on utilise la fonction signif(), comme ceci :
x1 <- c(0.7950132,11.49269,104.6323)
x1
## [1] 0.79501 11.49269 104.63230
signif(x1,3)
## [1] 0.795 11.500 105.000
signif(x1,4)
## [1] 0.795 11.490 104.600
Cette fonction renvoie l’entier inférieur :
floor(x1)
## [1] 0 11 104
Cette fonction renvoie l’entier supérieur :
ceiling(x1)
## [1] 1 12 105
Cette fonction ne garde que la partie entière :
trunc(x1)
## [1] 0 11 104
Globalement, les fonctions présentées dans cet article agissent à trois niveaux différents. Les fonction round() , floor(), celining() et trunc() ont une véritable action sur la donnée, alors que la fonction options() avec ces arguments digits et scipen n’agissent que sur l’affichage de la donnée. Les fonctions format(), quant à elles, changent le format de la donnée, la passant de type numérique vers une chaîne de caractères.
J’espère que cet article vous aura fait découvrir de nouvelles fonctions et qu’elles vous seront utiles dans l’analyse de vos données avec R.
Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee
Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.