lubridate注意到“为函数'%/%'选择签名'Timespan#Timespan'的方法”是什么意思?

时间:2017-03-07 05:16:52

标签: r lubridate

当我在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. 我不清楚它的替代语法是什么 推荐。 #是R中的注释,因此可能是哈希值 意思是哈希以外的东西,但是什么?
  2. 它告诉我我做错了吗?该笔记似乎暗示它是一个FYI,但如果没有问题,FYI是一个奇怪的事情,如果没有问题就吐出一个函数。

1 个答案:

答案 0 :(得分:4)

此警告仅在您第一次运行时发生,以提醒您整数除法的问题是数月或数年不一定在其他单位(如小时或天)中具有相同的长度。

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

实际上没有办法绕过警告(至少不是整数除法),因为警告始终是指向该点,即使您正在划分间隔%/%间隔或期间%/%期间。

但它只会在您第一次运行您的部门时显示,之后它会变得沉默。

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

理论上,如果划分的双方都被表示为时间跨度类,则应该可以避免警告。但我从来没有试过这样做。