Frage

Es gibt eine Option in R, die Kontrolle über stelliges Display zu erhalten. Zum Beispiel:

options(digits=10)

sollte die Berechnungsergebnisse in 10 Stellen bis zum Ende der R-Sitzung geben. In der Hilfedatei von R, die Definition für Ziffern Parameter ist wie folgt:

  

Stellen: steuert die Anzahl der Stellen   zu drucken, wenn das Drucken numerische Werte.   Es ist ein einziger Vorschlag. Gültige Werte   sind 1 ... 22 mit Standard 7

So, sagt er dies nur ein Vorschlag ist. Was passiert, wenn ich wie immer 10 Ziffern angezeigt wird, nicht mehr oder weniger?

Die zweite Frage ist, was passiert, wenn Ich mag mehr als 22 Ziffern angezeigt werden, das heißt für genauere Berechnungen wie 100 Ziffern? Ist es möglich, mit einer Base R, oder benötige ich ein zusätzliches Paket / Funktion für das?

Edit: Dank jmoy Vorschlag habe ich versucht, sprintf("%.100f",pi) und es gab

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

, die 48 Dezimalstellen hat. Ist das die maximale Grenze R umgehen kann?

War es hilfreich?

Lösung

Der Grund, es ist nur ein Vorschlag ist, dass Sie ganz einfach eine Druckfunktion, dass der Optionswert ignoriert schreiben konnten. Der eingebaute in Druck und Formatierungsfunktionen verwenden Sie die options Wert als Standard.

In Bezug auf die zweite Frage, da R endliche Genauigkeit Arithmetik verwendet, sind die Antworten nicht korrekt über 15 oder 16 Dezimalstellen, so in der Regel mehr sind nicht erforderlich. Der gmp und RCDD Pakete befassen sich mit mehreren Arithmetik (über eine interace an die gmp-Bibliothek), aber dies ist vor allem im Zusammenhang mit große Zahlen anstatt mehr Dezimalstellen für Doppelzimmer.

Mathematica oder Maple ermöglicht es Ihnen, so viele Dezimalstellen wie das Herz begehrt zu geben.

EDIT:
Es könnte nützlich sein, um den Unterschied zwischen Dezimalstellen und signifikanten Zahlen zu denken. Wenn Sie statistische Tests machen, die über den 15. bedeutende Figur auf Differenzen verlassen, dann wird Ihre Analyse ist mit ziemlicher Sicherheit Junk.

Auf der anderen Seite, wenn Sie nur mit sehr geringen Stückzahlen handeln, das weniger ein Problem ist, da R Zahl so klein wie .Machine$double.xmin verarbeiten kann (in der Regel 2e-308).

Vergleichen Sie diese beiden Analysen.

x1 <- rnorm(50, 1, 1e-15)
y1 <- rnorm(50, 1 + 1e-15, 1e-15)
t.test(x1, y1)  #Should throw an error

x2 <- rnorm(50, 0, 1e-15)
y2 <- rnorm(50, 1e-15, 1e-15)
t.test(x2, y2)  #ok

Im ersten Fall, Unterschiede zwischen den Zahlen auftreten, erst nach vielen signifikanten Zahlen, so dass die Daten sind „nahezu konstant“. Im zweiten Fall Obwohl die Größe der Unterschiede zwischen den Zahlen gleich ist, im Vergleich zu der Größe der Zahlen selbst sind sie groß.


Wie e3bo erwähnt, können Sie mehr genaue Gleitkommazahlen mit dem Rmpfr Paket verwenden.

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")

Dies sind langsamer und speicherintensiver als normale (double precision) numeric Vektoren zu verwenden, kann aber nützlich sein, wenn Sie ein schlecht konditionierten Problem oder instabilen Algorithmus haben.

Andere Tipps

Wenn Sie die gesamte Ausgabe selbst produzieren, können Sie sprintf() verwenden, z.

> sprintf("%.10f",0.25)
[1] "0.2500000000"

Gibt an, dass eine Fließkommazahl mit zehn Dezimalstellen formatiert werden soll (in %.10f die f für Schwimmer ist und die .10 gibt an zehn Dezimalstellen).

Ich weiß nicht, von irgendeiner Weise R höhere Funktionen zwingen, eine genaue Anzahl von Ziffern zu drucken.

Es werden 100 Stellen ist nicht sinnvoll, wenn Sie R üblichen Zahlen Druck, da die beste Genauigkeit können Sie 64-Bit-Doppelzimmer erhalten mit etwa 16 Dezimalstellen (Blick auf .Maschine $ double.eps auf Ihrem System). Die restlichen Stellen werden nur Junk sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top