2012-12-29 5 views
9

Was ich versuche zu erreichen ist, dass alle gedruckten Zahlen maximal 7 Ziffern anzeigen. Hier sind einige Beispiele von dem, was ich will gedruckt:Stoppen einer großen Anzahl von Nullen, die gedruckt werden (keine wissenschaftliche Notation)

0,000000 (im Vergleich zu der tatsächlichen Anzahl der ,000000000029481 ist .....)

0,299180 (im Vergleich zu der tatsächlichen Anzahl der ,299180291884922 ist .....)

Ich hatte Erfolg mit den letzteren Arten von Zahlen mit options(scipen=99999) und options(digits=6). Das vorherige Beispiel wird jedoch immer eine große Anzahl von Nullen gefolgt von fünf Ziffern ungleich Null drucken. Wie verhindere ich das Auftreten und erreiche mein gewünschtes Ergebnis? Ich möchte auch nicht wissenschaftliche Notation.

Ich möchte dies für alle gedruckten Zahlen in jedem Kontext gelten. Zum Beispiel, wenn ich eine Matrix habe, rufe sie A, und ich drucke diese Matrix, ich möchte, dass jedes Element nur 6-7 Ziffern ist. Ich möchte, dass dies für jeden Druck in jedem Kontext automatisch erfolgt. genau wie die Verwendung von options(digits=6) und options(scipen=99999) macht es automatisch für jeden Kontext.

+0

Was ist, wenn Sie eine große Nummer haben, zum Beispiel 123456789.87654321. Wie können Sie es mit höchstens 7 Ziffern drucken, wenn Sie keine wissenschaftliche Notation verwenden ?! – flodel

+0

@ flodel Guter Punkt. Vielleicht möchte ich, dass diese sehr großen Zahlen wissenschaftliche Notation verwenden (oder sich über 6 Ziffern hinaus erstrecken). Aber wenn es nur eine Lösung gibt, die JEDEN dumber schneidet, 6-7 Ziffern; das ist in Ordnung, da ich nie mit großen Zahlen arbeite, die ich in der R-Konsole drucken muss. – Jase

Antwort

3

Sind alle Ihre Nummern < 1? Sie könnten eine einfache sprintf("%.6f", x) versuchen. Andernfalls könnten Sie versuchen, die Dinge auf sprintf basierend auf der Anzahl der Ziffern zu verpacken; Weitere Informationen finden Sie unter ?sprintf.

+0

Ich möchte, dass dies automatisch für jede einzelne Nummer drucken gilt; Eine Lösung, die "Optionen (Ziffern = 6)" ähnlich ist, da sie nur für jedes Objekt in jedem Kontext gilt und ich es nur einmal einstellen muss *. Nicht alles ist <1, aber alles, was ich interaktiv drucken muss, ist <100. – Jase

10

Sie können eine neue Druckmethode für den Typ definieren, den Sie drucken möchten. Wenn beispielsweise alle Ihre Zahlen verdoppelt sind, können Sie

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

Nun erstellen, wenn Sie einen doppelten (oder einen Vektor von Doppel) drucken, wird die Funktion print.double() statt print.default() aufgerufen werden.

Sie müssen möglicherweise ähnliche Funktionen erstellen print.integer(), print.complex(), usw., abhängig von den Typen, die Sie drucken müssen.

Um zur Standarddruckmethode zurückzukehren, löschen Sie einfach die Funktion print.double().