gpt4 book ai didi

r - 在 R 中迭代 POSIXlt

转载 作者:行者123 更新时间:2023-12-04 12:12:05 25 4
gpt4 key购买 nike

假设我有一个 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] 数据输入,如何对 POSIXct 对象执行 for 循环或 lapply

最佳答案

它的发生是因为 lapply 在列表上工作并且你是正确的存储,在 help("DateTimeClasses") 之后:

Class "POSIXlt" is a named list of vectors (...)

如果你真的需要使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com