2013-07-02 1 views
5

Ich arbeite mit einigen Tageszeitreihen, wo Zeiten bis Minuten dargestellt werden müssen.Mit einer Datum/Uhrzeit-Klasse für die numerische Berechnung und auch als Schlüssel zum Zusammenführen

In verschiedenen Tools werden einige Datum/Uhrzeit-Klassen seit der Epoche als ganze Zahlen dargestellt (z. B. POSIX-Klassen von R, Python/Numpy); andere sind gebrochene Tage seit der Epoche (z. B. Rs Chron-Paket, auch Matlab).

Es scheint, dass Integer-Darstellungen ermöglicht numerische Berechnungen (Summe, Differenz) aber ALSO bieten eine Möglichkeit zum Zusammenführen/Übereinstimmen von ihnen, während es schwieriger ist, für die durch Bruch Tage (Gleitkommazahlen).

Dies ist eher eine konzeptionelle Frage, aber gibt es einen guten Grund für die Verwendung von Bruchteilen Tagen oder Floats für Zeitrepräsentationen? Für R ist es seltsam, dass sogar POSIX-Klassen numerisch und nicht ganzzahlig sind.

> (p <- as.POSIXct("2011-01-01")) 
[1] "2011-01-01 CST" 
> (unclass(p <- as.POSIXct("2011-01-01"))) 
[1] 1293861600 
attr(,"tzone") 
[1] "" 
> class(unclass(p <- as.POSIXct("2011-01-01"))) 
[1] "numeric" 

War dies wegen der frühen ganzzahligen Speicherbeschränkung von R? Oder gibt es einen anderen Vorteil, Gleitkommadarstellungen zu verwenden? Zum Zusammenführen konvertiere ich meine Date/Time-Objekte in formatierte Zeichenketten, aber dies ist der kanonische Weg (ich verwende am häufigsten das -Paket in R)?

+0

[xts] (http://cran.r-project.org/web/packages/xts) verwendet POSIXct als Zeitindex und hat keine Schwierigkeiten beim Zusammenführen nach Sub-Sekunden. –

Antwort

3

POSIXct ist numerisch, weil es 53 Bits Genauigkeit bietet, im Gegensatz zu den 32 Bits von 4-Byte-Ganzzahlen. R wurde in der zweiten Hälfte des letzten Jahrhunderts hauptsächlich auf 32-Bit-Plattformen entwickelt, und die Verwendung von Ganzzahlen hätte es für das Jahr-2038-Problem anfällig gemacht. Jetzt, wo 64-Bit-Ints zur Verfügung stehen, wäre das eine bessere Wahl gewesen, aber wir stecken jetzt mit 53 Bits fest. Im Jahr ca. 285420000 Wenn das ein Problem wird, können wir es noch einmal besuchen.

+0

Die Verwendung eines Fließkommas ermöglicht Ihnen auch eine Genauigkeit von unter einer Sekunde auf Plattformen, die es unterstützen. –

Verwandte Themen