2014-04-22 51 views
4

在R,如果從NA減去一個數字將返回NA:在R中,爲什麼從NA中減去數字會返回NA,但是從NA中減去日期會返回一個錯誤?

> x <- 1 
> NA - x 
[1] NA 

但是,如果你嘗試減去NA的日期返回一個錯誤:

> x <- as.Date("2014-04-22") 
> NA - x 
Error in `-.Date`(NA, x) : can only subtract from "Date" objects 

我感興趣爲什麼R返回一個錯誤。據我所知,「日期」對象僅僅是與起源的整數差異的代表(默認爲1970-01-01)。

回答

5

這應該工作:

> as.Date(NA)-as.Date("2014-04-22") 
Time difference of NA days 

您可能,但是,從日期減去整數:

> as.Date("2014-04-22")-NA 
[1] NA 
> as.Date("2014-04-22")-2 
[1] "2014-04-20" 

這樣做的原因是,-運營商實際上是一個S3方法 - - 「重載」(調用的方法選擇)根據其第一個參數的類型完成。嘗試:

> get("-.Date") 

如果這是一個S4方法,它可能已被重載以將第二個參數的類型考慮在內。

有關S3方法調度機制的更多詳細信息,請參閱here

+0

好吧。這太有趣了。我通過將日期轉換爲數字差分和返回日期來修復它。你知道爲什麼「NA」需要轉換爲「日期」對象嗎? – user12202013

+0

看看?Ops.Date。對於操作員來說,對象需要是「日期」類 – infominer

+0

更確切地說,第一個參數應該是「日期」類。 – gagolews