Nombre de décimales, notation scientifique et arrondis avec R

nombre de décimales

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.

Gestion de l'affichage des nombres avec la fonction options()

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 

Modifier l'affichage du nombre de décimales

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 

Forcer l'utilisation de la notation scientifique

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 

Forcer la NON utilisation de la notation scientifique

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 

Formatage avec les fonctions format()

Exemples

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" 

Limites

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
 

Gérer l'arrondi

Différentes fonctions peuvent être employées pour arrondir un chiffre ; les principales sont :

– round()
– signif()
– floor()
– celiling()
– trunc()

La fonction round()

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 

La fonction signif()

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 

La fonction floor()

Cette fonction renvoie l’entier inférieur :

floor(x1) 
## [1] 0 11 104 

La fonction ceiling()

Cette fonction renvoie l’entier supérieur :

ceiling(x1)
## [1] 1 12 105 

La fonction trunc()

Cette fonction ne garde que la partie entière :

trunc(x1)
## [1]   0  11 104 

Conclusion

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 🙏

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

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.