2012-06-27 21 views
7

Sto eseguendo il codice per produrre le uscite dove voglio che tutte le uscite siano stampate con 1 decimale. Tuttavia il codice utilizza funzioni che uso in generale e non voglio specificare all'interno di esse che l'output stampato sia arrotondato.Impostazione del numero predefinito di posizioni decimali per la stampa

Le risposte a questa domanda Formatting Decimal places in R suggeriscono di utilizzare options(digits=2) o round(x, digits=2).

La prima opzione è un'impostazione generale che è grande per l'arrotondamento 1.234 a 1.2 ma sarebbe stampare 12.345 come 12

La seconda opzione funzionerebbe se messo all'interno della funzione, ma io non voglio toccarli. Come impostare questo in generale?

risposta

8

Si potrebbe fare questo:

print <- function(x, ...) { 
    if (is.numeric(x)) base::print(round(x, digits=2), ...) 
    else base::print(x, ...) 
} 
+0

Grazie per il suggerimento. Nel tentare questo sono arrivato allo stesso problema, come le opzioni di impostazione (cifre = 2) - 'funzione di stampa #load x <- 12.34 z = stampa (x) [1] 12' - c'è qualcosa che' m mancante? – BuckyOH

+1

hai ripristinato l'opzione 'cifre 'al suo valore predefinito? riprovare in una nuova sessione. –

+0

Beh, questo è imbarazzante, sembra funzionare ora. Grazie. – BuckyOH

5

Mi piace formatC per la stampa di numeri con un numero specificato di cifre decimali. In tal modo, 1 deve sempre essere stampato come "1.0" quando digits = 1 e format = "f". È possibile creare un metodo di stampa S3 per oggetti di classe numerici come i seguenti:

print.numeric<-function(x, digits = 1) formatC(x, digits = digits, format = "f") 

print(1) 
# [1] "1.0" 

print(12.4) 
# [1] "12.4" 

print(c(1,4,6.987)) 
# [1] "1.0" "4.0" "7.0" 

print(c(1,4,6.987), digits = 3) 
# [1] "1.000" "4.000" "6.987" 
Problemi correlati