2

如果你想应用一个函数而不是format一个 POSIXct 对象列表怎么办?例如,假设我想取一个时间向量,将这些时间截断为小时,并对每个时间应用一个任意函数。

> 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"

现在,我希望长度为obs.truncated3 但

> length(obs.truncated)
[1] 9

因此,您可以看到尝试apply对该向量执行函数是行不通的。类obs.truncated

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

知道这里发生了什么吗? apply并且length似乎将向量的第一个元素作为自己的列表。

4

1 回答 1

1

这种length()POSIXlt 的 曾经被报告为 9,但最近得到了纠正。

另外,当我trunc(obs.times)做错事时——trunc()只对一个由三个元素组成的字符串操作一次。你确实需要apply()等。

所以这里是一个使用sapply()组件重置的例子:

> 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"
> 

然而

> 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
> 
于 2010-07-06T20:05:54.637 回答