Frage

Was passiert, wenn Sie eine andere Funktion als format auf eine Liste von POSIXct Objekte anwenden möchten? Zum Beispiel, sagen, dass ich einen Vektor von Zeiten nehmen will, diese Zeiten auf die Stunde gestutzt und anzuwenden, um eine beliebige Funktion zu jedem dieser Zeiten.

> obs.times=as.POSIXct(c('2010-01-02 12:37:45','2010-01-02 08:45:45','2010-01-09 14:45:53'))
> obs.truncated=trunc(obs.times, units="hours")
> obs.truncated
[1] "2010-01-02 12:00:00 EST" "2010-01-02 08:00:00 EST"
[3] "2010-01-09 14:00:00 EST"

Nun würde ich die Länge von obs.truncated erwartet 3 zu sein, aber

> length(obs.truncated)
[1] 9

So können Sie sehen, dass eine Funktion dieses Vektors apply versuchen, ist nicht zur Arbeit gehen. Die Klasse von obs.truncated ist

> class(obs.truncated)
[1] "POSIXt"  "POSIXlt"

Jede Idee, was ist hier los? apply und length erscheinen das erste Element des Vektors als seine eigene Liste zu nehmen.

War es hilfreich?

Lösung

Die length() eines solchen POSIXlt verwendet als neun gemeldet werden, aber das kürzlich korrigiert wurde.

Auch wenn ich trunc(obs.times) tun das Falsche geschieht - trunc() arbeitet nur einmal an einer Schnur aus drei Elementen. Sie müssen apply() et al.

So, hier ist ein Beispiel für die Verwendung sapply() mit komponentenweise Rückstellung:

> sapply(obs.times, function(.) {
+ p <- as.POSIXlt(.); 
+ p$min <- p$sec <- 0; 
+ format(p) })
[1] "2010-01-02 12:00:00" "2010-01-02 08:00:00" "2010-01-09 14:00:00"
> 

Die

> trunc(obs.times, units="hours")
[1] "2010-01-02 12:00:00 CST" "2010-01-02 08:00:00 CST"
[3] "2010-01-09 14:00:00 CST"
> class(trunc(obs.times, units="hours"))
[1] "POSIXt"  "POSIXlt"
> length(trunc(obs.times, units="hours"))
[1] 1
> 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top