首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的POSIXlt迭代

R中的POSIXlt迭代
EN

Stack Overflow用户
提问于 2013-09-21 11:22:49
回答 1查看 911关注 0票数 3

假设我有一个POSIXct对象的输入向量:

代码语言:javascript
复制
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

代码语言:javascript
复制
unique.dates <- unique(trunc(times.input, 'days')))
class(times.rounded)
# [1] "POSIXlt" "POSIXt"

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

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-23 19:25:57

它之所以发生,是因为lapply在列表中工作,而在help("DateTimeClasses")之后,存储是正确的

类"POSIXlt“是向量的命名列表(.)

如果您确实需要使用POSIXlt,我建议将其转换为list,例如:

代码语言:javascript
复制
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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18931973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档