在R中,为什么从NA中减去数字会返回NA但是从NA中减去日期会返回错误?

Ell*_*ner 4 r

在R中,如果从NA中减去一个数字,它将返回NA:

> x <- 1
> NA - x
[1] NA
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试从NA中减去日期,则会返回错误:

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

我对R返回错误的原因感兴趣.据我所知,"日期"对象只是与原点的整数差异(默认为1970-01-01)的he表示.

gag*_*ews 5

这应该工作:

> as.Date(NA)-as.Date("2014-04-22")
Time difference of NA days
Run Code Online (Sandbox Code Playgroud)

但是,您可以从日期中减去一个整数:

> as.Date("2014-04-22")-NA
[1] NA
> as.Date("2014-04-22")-2
[1] "2014-04-20"
Run Code Online (Sandbox Code Playgroud)

原因是-操作符实际上是一个S3方法 - "重载"(调用方法选择)是根据其第一个参数的类型完成的.尝试:

> get("-.Date")
Run Code Online (Sandbox Code Playgroud)

如果这是一个S4方法,它可能已被重载以考虑第二个参数的类型.

有关S3方法调度机制的更多详细信息,请参见此处.