2017-03-07 80 views
6

當我運行在RI下面的代碼得到一個奇怪的音符(只顯示在我第一次運行的會話的代碼):爲函數'%/%'選擇簽名'Timespan#Timespan'的lubridate note「方法是什麼意思?

> 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. 它是否告訴我我做錯了什麼?這個提示似乎暗示這是一個供參考,但如果沒有問題,一個供參考的參考是一個奇怪的事情。

回答

3

這個警告只會在您第一次運行它時發生,提醒您做整數除法存在的問題是幾個月或幾年在其他單位(如小時或天)中不一定具有相同的長度。

假設我們將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 

從理論上講,如果分部的兩邊都表示爲時間段類別,應該可以避免警告。但我從來沒有試圖這樣做。