2012-05-30 24 views
7

I non desidera vedere qualsiasi notazione scientifica in qualsiasi risultato di qualsiasi calcolo nella mia sessione R. Voglio vedere tutti i numeri effettivi, preferibilmente con una virgola (,) dopo ogni tre cifre.Rimuovere completamente la notazione scientifica per l'intera sessione R

Come posso farlo? options(scipen = 999) non lo taglia.

+1

Per curiosità morbosa, perché? La doppia precisione è accurata solo a ~ 16 cifre, quindi tutto ciò che segue è arrotondato comunque. –

+1

utilizzo contabilità – JoeJoe

+2

Capisci la differenza tra ciò che viene visualizzato nella console e ciò che viene scritto in un file o in un'altra connessione? –

risposta

10

La funzione print.default esamina il valore options()['digits'] in "decidere" la larghezza da allocare, quindi potrebbe essere necessario aumentarlo e provare a eseguire il maxout di "scipen". Esistono problemi specifici del sistema operativo con valori superiori a 16 per quella larghezza. Per quanto riguarda la richiesta di virgole, ... lascia perdere. R non è un sistema di reporting finanziario. Se è necessario forzare questo formato di output, è possibile definire gli oggetti come appartenenti a una particolare classe e scrivere per loro metodi di stampa utilizzando sprintf e formatC, oppure suppongo che si possa riscrivere print.default, ma ciò potrebbe influire solo sulle operazioni di stampa che non erano passato a uno degli altri 100 metodi per print.

Esistono metodi di output. formatC() e prettyNum() hanno entrambi un argomento "big.mark" che inserirà virgole in numeri. L'output è nel formato "character", quindi fare non provare a eseguire ulteriori calcoli sui risultati che si creano.

Ci sono anche metodi di input in grado di leggere colonne con i numeri contenenti virgole o simboli di valuta:

setAs("character", "num.with.commas", function(from) as.numeric(gsub(",", "", from))) 
setAs("character", "euro", 
function(from) as.numeric(gsub("€", "", from))) 
setAs("character", "num_pct", 
function(from) as.numeric(gsub("%", "", from))/100) 
# you will get warning messages if you have not defined the class, 
#  .... but this will still succeed 

Input <- "A B C 
1,000 1% 3.50€ 
2,000 2% 4.77€ 
3,000 3% €5.68 
" 
DF <- read.table(textConnection(Input), header = TRUE, 
       colClasses = c("num.with.commas", "num_pct", "euro")) 
str(DF) 
Problemi correlati