我想测试xts对象的最后一行的日期是否等于当前日期。我的问题是last(index(obj))
会返回Sys.Date()
函数没有的时区信息。
> last(index(obj))
[1] "2016-09-16 UTC"
> Sys.Date()
[1] "2016-09-16"
我的解决方法是paste0
Sys.Date()
和Sys.timezone()
但不优雅。有更好的解决方案吗?
# Test if we already have data
if (last(index(obj)) == paste0(Sys.Date(), " ", Sys.timezone())) {
next
}
*编辑*
更多信息:
> str(obj)
An ‘xts’ object on 2013-06-01/2016-09-16 containing:
Data: num [1:1204, 1:6] NA NA NA NA NA NA NA NA NA NA ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "Open" "High" "Low" "Close" ...
Indexed by objects of class: [POSIXct,POSIXt] TZ: UTC
xts Attributes:
List of 1
$ dateFormat: chr "Date"
谢谢,
答案 0 :(得分:3)
打印时区是因为index(obj)
是POSIXct
类对象。如果要将index(obj)
的输出与Sys.Date()
的输出进行比较,则需要确保index
的输出是Date
类对象。有几种方法可以实现这一目标:
1)直接将index
的输出转换为Date
:
as.Date(last(index(obj))) == Sys.Date()
2)将obj
的整个索引转换为Date
(请注意索引类当前为POSIXct
):
indexClass(obj) <- "Date"
last(index(obj)) == Sys.Date()
答案 1 :(得分:0)
实际上问题来自我对象的POSIXct时间格式。使用Date
转换为as.Date(last(index(obj)))
解决了我的问题。