Ich habe ein Vektor mit vielen Zahlen (> 1E9-Elemente) und wollen abzuleiten die numerische Genauigkeit (Anzahl der Stellen zu erhalten in einer Zahl) und numerische Skala (die Anzahl der Stellen rechts von dem Komma in einer Zahl). Wie kann ich das tun sehr schnell (vektorisiert)?schnelle Art und Weise numerische Genauigkeit und Skalierung (n/o Dezimalstellen) für einen numerischen Vektor
Es existiert eine Frage mit einer Teilantwort (how to return number of decimal places in R), aber die Lösung ist weder schnell (vektorisiert) noch berechnet sie die numerische Genauigkeit.
Beispiel:
# small example vector with numeric data
x <- c(7654321, 54321.1234, 321.123, 321.123456789)
> numeric.precision(x) # implementation is the answer
[1] 7, 9, 6, 12
> numeric.scale(x) # implementation is the answer
[1] 0, 4, 3, 9
Optional "Zucker" (später auf diese Frage hinzugefügt - thx to @thc und @gregor):
Wie kann ich vermeiden, über Zählen der Anzahl der Ziffern aufgrund interner Ungenauigkeit, wie Zahlen in Computern gespeichert sind (zB float)?
> x = 54321.1234
> as.character(x)
[1] "54321.1234"
> print(x, digits = 22)
[1] 54321.12339999999676365
Ihre Eingabe sollte Zeichenketten, nicht Numerik sein. Der Grund ist, dass Floats leicht ungenau sein dürfen. Zum Beispiel: a = 0,15 + 0,15; b = 0,1 + 0,2; a == b ist falsch. – thc
Oder, relevanter für Ihre Beispieldaten: 'x = 54321.1234; Druck (x, Ziffern = 22) ' – Gregor
@thc Sehr guter Punkt! Ich muss eine wichtige Vorbedingung erwähnen: Da ich meine Daten aus einer CSV-Datei in meine 'data.table' eingelesen habe, kann ich (fast ;-)) garantieren, dass ich eine begrenzte Anzahl von Ziffern habe (obwohl eine interne Konvertierung in einen Float kann zerstöre meine Vorbedingung ;-) –