在R中迭代POSIXlt

时间:2013-09-21 11:22:49

标签: r

想象一下,我有POSIXct个对象的输入向量:

times.input <- c(
  as.POSIXct('2013-01-01 00:00:00', tz='GMT'),
  as.POSIXct('2013-01-01 00:00:01', tz='GMT')
)
class(times.input)
# [1] "POSIXct" "POSIXt" 

部分功能(例如roundtrunc)将POSIXct转换为POSIXlt

unique.dates <- unique(trunc(times.input, 'days')))
class(times.rounded)
# [1] "POSIXlt" "POSIXt"

然后,如果我们尝试迭代或lapply这个对象,就会发生奇怪的事情:

lapply(X=unique.dates, FUN=print)
# [1] 0 0
# [1] 0 0
# [1] 4 4
# [1] 1 1
# [1] 0 0
# [1] 113 113
# [1] 2 2
# [1] 0 0
# [1] 0 0

似乎POSIXlt在内部垂直存储为向量列表, 迭代遍历内部结构,而不是迭代每个对象。

我知道在这种情况下转换为POSIXct会有所帮助,因为POSIXct在内部存储为整数,但我认为这个解决方案很难看。

所以我的问题是:给定POSIXlt[2]数据输入,如何执行循环或lapplyPOSIXct个对象?

1 个答案:

答案 0 :(得分:2)

正在发生这种情况lapply适用于列表,而您在help("DateTimeClasses")之后存储是正确的:

  

类“POSIXlt”是矢量(...)

的命名列表

如果您确实需要使用POSIXlt我建议转换为列表,例如:

times.input.L <- split(times.input, seq_along(times.input))
lapply(times.input.L, print)
[1] "2013-01-01 01:00:00 CET"
[1] "2013-01-01 01:00:01 CET"