R 的 trunc 和 round 不适用于 class 日期?

R's trunc and round not working for class Date?

从文档来看,我觉得我应该可以对 "Date" 对象使用 round 和 trunc。但是,它似乎只有在我第一次将它转换为 "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

我希望日期和 posix 类 的输出相同。我是不是误会了什么?

?trunc

trunc takes a single numeric argument x and returns a numeric vector containing the integers formed by truncating the values in x toward 0.

round rounds the values in its first argument to the specified number of decimal places (default 0).

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

关于 POSIXct class,可能与它们自起源以来的秒数有关。

我通常使用 r-base 功能,除非它与测试意外情况有关。

重新阅读文档后,我很清楚 "Date" 和 "POSIXt" class 的记录行为不同。 "Date" 的用法示例中省略了 units 参数。我只是在第一次阅读文档时误解了文档。您必须先转换为 POSIX 才能根据单位进行舍入和截断。

?trunc.Date

S3 method for class 'POSIXt'

trunc(x, units = c("secs", "mins", "hours", "days", "months", "years"), ...)

S3 method for class 'Date'

trunc(x, ...)

还有:

The methods for class "Date" are of little use except to remove fractional days.