2012-12-29 10 views
9

Quello che sto cercando di ottenere è di visualizzare tutti i numeri stampati al massimo 7 cifre. Ecco alcuni esempi di quello che voglio stampata:Arresto di un numero elevato di zeri in fase di stampa (notazione scientifica)

0,000000 (rispetto al numero effettivo che è 0,000000000029481 .....)

0,299180 (rispetto al numero effettivo che è 0,299180291884922 .....)

Ho avuto successo con questi ultimi tipi di numeri utilizzando options(scipen=99999) e options(digits=6). Tuttavia, il precedente esempio stamperà sempre un numero enorme di zeri seguito da cinque cifre diverse da zero. Come posso evitare che ciò si verifichi e ottenere il risultato desiderato? Anche io non voglio la notazione scientifica.

Voglio che questo si applichi a TUTTI i numeri stampati in OGNI contesto. Per esempio se ho una matrice, chiamala A, e stampo questa matrice, voglio che ogni elemento abbia solo 6-7 cifre. Voglio che questo sia automatico per ogni stampa in ogni contesto; proprio come l'uso di options(digits=6) e options(scipen=99999) lo rende automatico per ogni contesto.

+0

Cosa succede se si dispone di un numero elevato, ad esempio 123456789.87654321. Come si può stampare usando al massimo 7 cifre se non si userà la notazione scientifica ?! – flodel

+0

@flodel Buon punto. Forse mi piacerebbe che questi numeri molto grandi usassero la notazione scientifica (o si estendessero oltre le 6 cifre). Ma se esiste solo una soluzione che tronca OGNI piumaggio fa 6-7 cifre; va bene, dal momento che non lavoro mai con numeri grandi che ho bisogno di stampare nella console R. – Jase

risposta

3

Tutti i numeri < 1? Potresti provare un semplice sprintf("%.6f", x). Altrimenti potresti provare a portare le cose a sprintf in base al numero di cifre; controllare ?sprintf per altri dettagli.

+0

Voglio che questo si applichi automaticamente a ogni singola stampa numerica; una soluzione simile a 'options (digit = 6)' in quanto si applica a tutti gli oggetti in ogni contesto e ho solo bisogno di impostarlo * una volta *. Non tutto è <1, ma tutto * che ho bisogno di stampare in modo interattivo * è <100. – Jase

10

È possibile definire un nuovo metodo di stampa per il tipo che si desidera stampare. Ad esempio, se tutti i numeri sono doppie, è possibile creare

print.double=function(x){sprintf("%.6f", x)} 

Ora, quando si stampa una doppia (o un vettore di doppie), la funzione print.double() sarà chiamato al posto di print.default().

Potrebbe essere necessario creare funzioni simili print.integer(), , ecc., In base ai tipi da stampare.

Per tornare al metodo di stampa predefinito, è sufficiente eliminare la funzione print.double().

Problemi correlati