2016-09-16 7 views
1

Я хотел бы проверить, соответствует ли дата последней строки объекта xts текущей дате. Моя проблема заключается в том, что last(index(obj)) возвращает информацию о часовом поясе Sys.Date().Как форматировать индекс() без информации TZ в R?

> last(index(obj)) 
[1] "2016-09-16 UTC" 

> Sys.Date() 
[1] "2016-09-16" 

Обходной я имею в paste0Sys.Date() и Sys.timezone(), но это не элегантно. Есть ли лучшее решение ?

# Test if we already have data 
    if (last(index(obj)) == paste0(Sys.Date(), " ", Sys.timezone())) { 

    next 

    } 

* EDIT *

Подробнее:

> 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" 

Спасибо,

+1

Я вижу, что атрибут 'dateFormat' -' 'Date", но класс индекса - 'POSIXct'. Как вы создали 'obj'? –

ответ

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() 
+0

Спасибо, Ульрих, второе решение, которое вы предоставляете, идеально подходит для меня. – Florent

0

На самом деле проблема возникает из формата времени POSIXct моего объекта. Преобразование в Date с as.Date(last(index(obj))) решить мою проблему.