2017-03-07 19 views
6

जब मैं चलाने के आरआई में निम्न कोड एक अजीब टिप्पणी प्राप्त (यह केवल पहली बार मैं एक सत्र में कोड को चलाने के लिए प्रकट होता है):लुब्रिडेट नोट "हस्ताक्षर के साथ विधि 'टाइम्सpan # टाइम्सपैन' फ़ंक्शन '% /%' के लिए चुना गया है" मतलब?

> 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. मैं कर रहा हूँ वैकल्पिक वाक्यविन्यास के अनुसार अस्पष्ट है कि यह अनुशंसा करता है। ए # आर में एक टिप्पणी है, इसलिए संभावित रूप से हैश का मतलब हैश के अलावा कुछ और मतलब है, लेकिन क्या?
  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 

सिद्धांत रूप में यह चेतावनी से बचने के लिए विभाजन के दोनों ओर एक समयावधि वर्ग के रूप में प्रतिनिधित्व कर रहे हैं यदि संभव हो जाना चाहिए। लेकिन मैंने कभी ऐसा करने की कोशिश नहीं की है।

संबंधित मुद्दे