Подтвердить что ты не робот

R - как объявить вектор Date?

Например, я попытался создать вектор Даты, длина 5. Нет работы:

date(5)
Date(5)
vector(5, mode = "Date" )

Это работает, но интересно, есть ли ярлык?

as.Date( numeric( 5 ) )

Кроме того, я вижу, что режим (as.Date( "2011-01-01" )) является числовым, и я понимаю, что базовая структура данных для дат является числовой, но с учетом того, что vector() имеет только режим и длину аргумент, мне кажется, что его невозможно создать вектор Даты без принуждения?

Изменить
Это также решение, за исключением length = 0?

Date = function( length = 0 )
{
   newDate = numeric( length )
   class(newDate) = "Date"
   return(newDate)
}
4b9b3361

Ответ 1

Вы можете использовать последовательность или просто добавить:

R> seq( as.Date("2011-07-01"), by=1, len=3)
[1] "2011-07-01" "2011-07-02" "2011-07-03"
R> as.Date("2011-07-01") + 0:2
[1] "2011-07-01" "2011-07-02" "2011-07-03"
R> 

и что оба работают одинаково - это хорошая иллюстрация, почему объектная ориентация хороша для программирования с данными.

Дата, как вы видели, имеет базовое числовое представление (целых чисел, представляющих количество дней с начала Unix time, aka 1 января 1970 г.), но также имеет атрибут класса, который делает форматирование, арифметику,... ведут себя так, как он использует механизм отправки в R.

Изменить: тем самым вы также можете начать со стандартного вектора и превратить его в объект Date:

R> x <- 1:3
R> class(x) <- "Date"
R> x
[1] "1970-01-02" "1970-01-03" "1970-01-04" 
R> 

Ответ 2

Для инициализации с отсутствующими датами вместо связки 1970-01-01s:

(x = structure(rep(NA_real_, 10 ), class="Date"))
# [1] NA NA NA NA NA NA NA NA NA NA
class(x)
# [1] "Date"