Formattazione di posizioni decimali in R

Ho un numero, ad esempio 1.128347132904321674821 che vorrei mostrare come solo due cifre decimali quando viene stampato sullo schermo (o scritto in un file). Come si fa a farlo?

x <- 1.128347132904321674821 

MODIFICARE:

L’impiego di:

 options(digits=2) 

È stato suggerito come una ansible risposta. C’è un modo per specificare questo all’interno di uno script per un uso occasionale? Quando lo aggiungo al mio script non sembra fare nulla di diverso e non mi interessa molto ridigitare per formattare ogni numero (sto automatizzando un rapporto molto grande).

Risposta: round (x, cifre = 2)

Background: alcune risposte suggerite in questa pagina (ad esempio, signif , options(digits=...) ) non garantiscono che un determinato numero di decimali venga visualizzato per un numero arbitrario. Presumo che questa sia una caratteristica del design in R, per cui una buona pratica scientifica comporta la visualizzazione di un certo numero di cifre basate su principi di ” figure significative “. Tuttavia, in molti domini (ad esempio, lo stile APA , i report aziendali) i requisiti di formattazione impongono la visualizzazione di un certo numero di posizioni decimali. Questo è spesso fatto per coerenza e standardizzazione piuttosto che preoccuparsi di cifre significative.

Soluzione :

Il seguente codice mostra esattamente due posizioni decimali per il numero x .

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

Per esempio:

 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" 

Una funzione più generale è la seguente dove x è il numero e k è il numero di decimali da mostrare. trimws rimuovono qualsiasi spazio bianco iniziale che può essere utile se si dispone di un vettore di numeri.

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

Per esempio,

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

Puoi formattare un numero, diciamo x , fino a cifre decimali come desideri. Qui x è un numero con molte posizioni decimali. Supponiamo di voler mostrare fino a 8 posizioni decimali di questo numero:

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

Qui format="f" fornisce numeri fluttuanti nelle solite cifre decimali dire, xxx.xxx e digits specifica il numero di cifre. Al contrario, se si desidera ottenere un numero intero da visualizzare, si utilizzerà format="d" (molto simile a sprintf ).

Puoi provare il mio pacchetto formattabile .

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

La cosa buona è che x è ancora un vettore numerico e puoi fare più calcoli con la stessa formattazione.

 > x + 1 [1] 2.13 

Ancora meglio, le cifre non vanno perse, puoi riformattare con più cifre in qualsiasi momento 🙂

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

per 2 cifre decimali assumendo che tu voglia mantenere gli zeri finali

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

che dà

 [1] "5.50" 

Come menziona @mpag di seguito, a volte R può dare valori inattesi con questo e il metodo round ad esempio sprintf (5.5550, fmt = ‘% #. 2f’) dà 5.55, non 5.56

Controlla le funzioni prettyNum, format

per fare provare gli zeri (123.1240 per esempio) usa sprintf(x, fmt='%#.4g')

Qualcosa del genere :

 options(digits=2) 

Definizione di opzione cifre:

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

Bene, i due che vengono in mente sono

 fixed(1.128347132904321674821, digits=2) 

o se preferisci cifre siginificanti a cifre fisse allora;

 signif(1.128347132904321674821,digits=3) 

La funzione formatC() può essere utilizzata per formattare un numero con due cifre decimali. Due posizioni decimali sono date da questa funzione anche quando i valori risultanti includono gli zero finali.

Nota che gli oggetti numerici in R sono memorizzati con una precisione doppia , che ti dà (approssimativamente) 16 cifre decimali di precisione – il resto sarà rumore. Concedo che il numero mostrato sopra sia probabilmente solo per un esempio, ma è lungo 22 cifre.

Sto usando questa variante per le cifre decimali K della stampa forzata:

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

Mi sembra che sarebbe qualcosa di simile

 library(tutoR) format(1.128347132904321674821, 2) 

Per un piccolo aiuto online .

se vuoi semplicemente arrotondare un numero o una lista, usa semplicemente

 round(data, 2) 

Quindi, i dati saranno arrotondati al 2 decimale.