web-dev-qa-db-fra.com

Formatage des décimales dans R

J'ai un nombre, par exemple 1.128347132904321674821 que je voudrais montrer avec seulement deux décimales lors de la sortie sur écran (ou écrit dans un fichier). Comment on fait ça?

x <- 1.128347132904321674821

MODIFIER:

L'utilisation de:

options(digits=2)

A été suggéré comme une réponse possible. Est-il possible de spécifier cela dans un script pour une utilisation unique? Quand je l'ajoute à mon script, il ne semble rien faire de différent et je ne suis pas intéressé par beaucoup de retaper pour formater chaque nombre (je suis en train d'automatiser un très gros rapport).

-

Réponse: rond (x, chiffres = 2)

231
Brandon Bertelsen

Contexte: Certaines réponses suggérées sur cette page (par exemple, signif, options(digits=...)) ne garantissent pas qu'un certain nombre de décimales sont affichées pour un nombre arbitraire. Je suppose que ceci est une caractéristique de la conception de R dans laquelle une bonne pratique scientifique consiste à indiquer un certain nombre de chiffres sur la base des principes de " chiffres significatifs ". Toutefois, dans de nombreux domaines (par exemple, style APA , rapports de gestion), les exigences de formatage imposent l'affichage d'un certain nombre de décimales. Cela se fait souvent à des fins de cohérence et de normalisation plutôt que de se préoccuper de chiffres significatifs.

Solution :

Le code suivant montre exactement deux décimales pour le nombre x.

format(round(x, 2), nsmall = 2)

Par exemple:

format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"

Une fonction plus générale est la suivante: x est le nombre et k le nombre de décimales à afficher. trimws supprime tout espace blanc au début qui peut être utile si vous avez un vecteur de nombres.

specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))

Par exemple.,

specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
339
Jeromy Anglim

Vous pouvez formater un nombre, par exemple x, jusqu'à la décimale à votre guise. Ici x est un nombre avec plusieurs décimales. Supposons que nous souhaitons afficher jusqu'à 8 décimales de ce nombre:

x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"

Ici, format="f" donne des nombres flottants dans les décimales habituelles, par exemple, xxx.xxx et digits spécifie le nombre de chiffres. En revanche, si vous voulez obtenir un entier à afficher, vous utiliserez format="d" (un peu comme sprintf).

28

Vous pouvez essayer mon paquet formatable .

> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13

La bonne chose est que x est toujours un vecteur numérique et que vous pouvez effectuer davantage de calculs avec le même formatage.

> x + 1
[1] 2.13

Mieux encore, les chiffres ne sont pas perdus, vous pouvez reformater avec plus de chiffres à tout moment :)

> formattable(x, digits = 6, format = "f")
[1] 1.128347
20
Kun Ren

pour 2 décimales, en supposant que vous souhaitiez conserver les zéros à la fin

sprintf(5.5, fmt = '%#.2f')

qui donne

[1] "5.50"

Comme @mpag le mentionne ci-dessous, il semble que R puisse parfois donner des valeurs inattendues avec cette méthode et la méthode round, par ex. sprintf (5.5550, fmt = '% #. 2f') donne 5,55 et non 5,56

16
Mark Adamson

Fonctions de vérification prettyNum, format

pour avoir des zéros d'essai (par exemple 123.1240), utilisez sprintf(x, fmt='%#.4g')

7
ilya

Quelque chose comme ca :

options(digits=2)

Définition de l'option de chiffres:

digits: controls the number of digits to print when printing numeric values.
6
Xavier V.

Si vous préférez les chiffres significatifs aux chiffres fixes, la commande signif peut être utile:

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300
5
PaulHurleyuk

La fonction formatC() peut être utilisée pour formater un nombre avec deux décimales. Cette fonction donne deux décimales, même lorsque les valeurs résultantes incluent des zéros à la fin.

4
Chernoff

J'utilise cette variante pour forcer l’impression K de décimales:

# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
3
Eldar Agalarov

Notez que les objets numériques dans R sont stockés avec double précision , ce qui vous donne (environ) 16 chiffres décimaux de précision - le reste sera du bruit. Je reconnais que le numéro indiqué ci-dessus n’est probablement qu’un exemple, mais il comporte 22 chiffres.

2
nullglob

On dirait que ce serait quelque chose comme

library(tutoR)
format(1.128347132904321674821, 2)

Par un peu aide en ligne .

1
Tim Meers

si vous voulez juste arrondir un nombre ou une liste, utilisez simplement

round(data, 2)

Ensuite, les données seront arrondies à 2 décimales.

1
jared