2012-09-28 8 views

risposta

19

Solo quando si emette un valore numerico è necessario scegliere una rappresentazione concreta (ad esempio, come deve essere formattato il numero). Non è possibile modificare una variabile numerica da "-0.34" a "-.34"; entrambe sono rappresentazioni per lo stesso numero.

Tuttavia, quando si emette un'espressione e, è possibile scegliere come deve essere formattato. Io non conosco alcun modo build-in per lasciare fuori la porta "0", ma si può sempre e solo rimuoverlo manualmente:

> sub("^(-?)0.", "\\1.", sprintf("%.2f", -0.34)) 
[1] "-.34" 

È possibile definire una funzione per comodità, ad esempio,

numformat <- function(val) { sub("^(-?)0.", "\\1.", sprintf("%.2f", val)) } 
+0

Ma 'sub' cambia la variabile in carattere ... –

+0

correggendo: * modifiche –

2

Oltre alla bella risposta @ di Stefan, mi sono imbattuto il seguente codice, che compie la stessa cosa ma stampa di più cifre decimali:

f = function(X1)gsub("0\\.","\\.", X1) 
+3

È necessario fare attenzione a sostituire semplicemente "0". con ".", poiché questo cambierà "10.12" in "1.12", che presumibilmente non è inteso. Ho risolto questo problema usando l'espressione regolare '"^(-?) 0. "'. Questo corrisponde solo se lo zero è il primo carattere (tranne forse un '-'). – stefan

+0

Grazie per il suggerimento, Stefan. @Manoel Galdino - per me la variabile rimane numerica dopo aver usato la funzione di Stefan. – rolando2

7

Oltre alle risposte esistenti, ho voluto ricordare che il il pacchetto weights ha una funzione rd() che può essere utilizzata per "arrotondare i numeri al testo senza zero iniziale". Ovviamente, il risultato non è numerico ma carattere.

library("weights") 
rd(-0.341, digits=2) 
[1] "-.34" 
0

Avevo bisogno di mostrare i numeri a 3 posizioni decimali. Se si desidera stampare un numero arbitrario di posizioni decimali e non si desidera aggiungere un altro pacchetto (ad esempio, il pacchetto weights sopra), questa funzione (adattata dalla risposta di @ stefan) sembra funzionare:

numformat <- function(x, digits = 2) { 
    ncode <- paste0("%.", digits, "f") 
    sub("^(-?)0.", "\\1.", sprintf(ncode, x)) 
} 

Così, per esempio:

> numformat(-.232, 2) 
[1] "-.23" 
> numformat(-.232, 3) 
[1] "-.232" 
> numformat(-.232, 4) 
[1] "-.2320" 
0

Se è per la segnalazione in R Markdown io uso il pacchetto MOTE con la funzione APA() e il codice: apa(-0.34, 2, FALSE) questo tornerà -.34 nei miei documenti.