R's trunc и round не работают для класса Date? - PullRequest
1 голос
/ 21 октября 2019

Судя по документации, я чувствую, что должен иметь возможность использовать round и trunc для объектов "Date". Тем не менее, он, кажется, работает, только когда я впервые конвертирую его в «POSIXct».

> d <- as.Date('2019-10-21')
> trunc(d,'months')
[1] "2019-10-21"
> trunc(as.POSIXct(d),'months')
[1] "2019-10-01 CEST"
> round(as.POSIXct(d),'months')
[1] "2019-11-01 CET"
> round(d,'months')
Error in round.default(18190, "months") : 
  non-numeric argument to mathematical function

Я ожидал одинакового вывода для классов date и posix. Я что-то здесь неправильно понимаю?

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

После перечитывания документации мне становится ясно, что задокументированное поведение отличается для классов «Дата» и «POSIXt». Аргументы units опущены в примере использования для «Дата». Я просто неверно истолковал документацию при первом прочтении. Сначала необходимо преобразовать в POSIX, чтобы иметь возможность округлять и усекать по отношению к единице.

?trunc.Date

S3 метод для класса 'POSIXt'

trunc (x, единицы = c ("секунды", "минуты", "часы", "дни", "месяцы", "годы"), ...)

метод S3 для класса 'Date'

trunc (x, ...)

, а также:

Методы для класса "Date" малопригодны, за исключением удалениядробные дни.

0 голосов
/ 21 октября 2019

?trunc

trunc принимает один числовой аргумент x и возвращает числовой вектор, содержащий целые числа, образованные путем усечения значений в x до 0.

округляет значенияв его первом аргументе указывается количество десятичных знаков (по умолчанию 0).

d <- as.Date('2019-10-21')
class(d)
#[1] "Date"

Что касается класса POSIXct, возможно, он имеет отношение к тому, что он занимает несколько секунд с момента возникновения.

Я обычно использую функции r-base или нет в целях, для которых они предназначены, если только это не связано с проверкой непреднамеренного.

...