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

Почему 365 дней равно 80000 годам?

У меня есть lubridate interval и вы хотите получить число дней как целое. Однако я получаю следующие странные промежуточные результаты:

library("lubridate")
i1 <- interval("2015-01-01 00:00:00", "2016-01-01 00:00:00")
i1 <- interval(ymd_hms("2015-01-01 00:00:00"), ymd_hms("2016-01-01 00:00:00")) # Gives the same result
duration(i1)
# [1] "31536000s (~365 days)"
duration(i1, units = "days")
# [1] "2724710400000s (~86340.86 years)"

Вот два рабочих ярлыка. Последний выдает сообщение "интервал принуждения к длительности" (И ​​я не знаю причину этого...)

> as.numeric(as.duration(i1), units = "days")
[1] 365
> as.numeric(i1, units = 'days')

(версия версии 3.3.0 от 2016-05-03, версия lubridate 1.5.6.)

4b9b3361

Ответ 1

Вы неправильно понимаете значение аргумента units. Из документации,

единиц символьной строки, которая определяет тип единиц, которые numотносится к.

где num - первый аргумент. Итак,

duration(i1)

эквивалентно

duration(i1, units = "seconds")

Однако

duration(i1, units = "days")

означает, что i1 измеряется в days; следовательно, очень большое число.

Ответ 2

По словам сопровождающего,

[с использованием duration объекта interval] следует запретить. Для преобразования используйте as.duration.

Кроме того, ошибка в приведенном выше коде теперь устранена путем запрета вызова функции:

> duration(i1)
Error in .duration_from_num(num, units) :
  First argument to `duration` constructor must be character or numeric. Supplied object of class 'Interval'
> as.duration(i1)
[1] "31536000s (~52.14 weeks)"