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

时间:2014-04-22 16:24:49

标签: r

在R中,如果从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返回错误的原因感兴趣。据我了解,&#34;日期&#34;对象只是与原点的整数差异的代表(默认为1970-01-01)。

1 个答案:

答案 0 :(得分: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方法 - “`overloading&#39;&#39; (调用方法选择)根据其第一个参数的类型完成。尝试:

> get("-.Date")

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

有关S3方法调度机制的更多详细信息,请参阅here