lubridate 注释 "method with signature ‘Timespan#Timespan’ chosen for function ‘%/%’" 是什么意思?

What does the lubridate note "method with signature ‘Timespan#Timespan’ chosen for function ‘%/%’" mean?

当我在 R 中 运行 以下代码时,我得到一个奇怪的注释(它只在我 运行 会话中的代码第一次出现时出现):

> library(lubridate)
Attaching package: ‘lubridate’
The following object is masked from ‘package:base’:
    date
Warning message:
package ‘lubridate’ was built under R version 3.3.2 
> data.frame(i = interval(ymd(20140101), ymd(20160101)))$i %/% years(1)
Note: method with signature ‘Timespan#Timespan’ chosen for function ‘%/%’,
  target signature ‘Interval#Period’.
  "Interval#ANY", "ANY#Period" would also be valid
[1] 2

我很困惑:

  1. 我不清楚替代语法是什么 推荐。 A # 是 R 中的注释,所以大概是散列的意思 意思不是散列,而是什么?
  2. 它是在告诉我我做错了什么吗?该注释似乎暗示它是一个 FYI,但如果没有问题,FYI 是从函数中吐出的奇怪东西。

这个警告只会在你第一次出现时出现 运行 它提醒你做整数除法有一个问题,即月或年在其他单位(如小时或天)中不一定具有相同的长度。

假设我们将2014--2018这个区间除以2年,答案是4并不完全正确,因为2016年是闰年,有366天。因此,如果您的计量单位只是年,那将是正确的,但如果您将其表示为间隔(可以用年表示,也可以用天或小时表示),则严格来说是不正确的。

实际上也没有办法绕过警告(至少不是整数除法),因为警告总是切中要点,即使您正在除以 interval %/% interval 或 period %/% period。

但它只会在您第一次 运行 时显示您的分区,之后它就没有声音了。

data.frame(i = interval(ymd(20140101), ymd(20160101)))$i %/% years(1)
Note: method with signature ‘Timespan#Timespan’ chosen for function ‘%/%’,
 target signature ‘Interval#Period’.
 "Interval#ANY", "ANY#Period" would also be valid
[1] 2
data.frame(i = interval(ymd(20140101), ymd(20160101)))$i %/% years(1)
[1] 2

理论上,如果划分的两边都用时间跨度class表示,应该可以避免警告。但我从来没有尝试过这样做。