想象一下,我有一个 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"
一些函数(如
round
或 trunc
)将 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]
数据输入,如何在 lapply
对象上执行 for 循环或 POSIXct
? 最佳答案
发生这种情况是因为 lapply
在列表上工作,并且您在 help("DateTimeClasses")
之后存储是正确的:
如果您确实需要使用 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"
关于r - 在 R 中迭代 POSIXlt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18931973/