Lubridate %--%
区间运算符会针对 NA 和非 NA 的某些配置抛出错误。特别是,为什么下面第四次调用 %--%
会返回错误?这是错误吗?
> library(lubridate)
> c(ymd("1980-10-14"), ymd("1980-10-14")) %--% c(ymd("1981-10-14"), ymd("1982-10-14"))
[1] 1980-10-14 10:00:00 AEST--1981-10-14 10:00:00 AEST
[2] 1980-10-14 10:00:00 AEST--1982-10-14 10:00:00 AEST
> c(ymd("1980-10-14"), NA) %--% c(ymd("1981-10-14"), ymd("1982-10-14"))
[1] 1980-10-14 10:00:00 AEST--1981-10-14 10:00:00 AEST
[2] NA--NA
> c(NA, NA) %--% c(ymd("1980-10-14"), ymd("1982-10-14"))
[1] NA--NA NA--NA
> c(NA, ymd("1980-10-14")) %--% c(ymd("1981-10-14"), ymd("1982-10-14"))
Error in as.POSIXct.numeric(start) : 'origin' must be supplied
注意
> NA %--% ymd("1981-10-14")
[1] NA--NA
> ymd("1981-10-14") %--% NA
[1] 1981-10-14 UTC--NA
最佳答案
异常发生在第四个示例中,因为当第一个参数为 NA 时,c
函数返回一个数字类向量。另一方面,当第一个参数是对 `ymd:
library(lubridate)
c(NA, ymd("1980-10-14"))
#[1] NA 340329600
class( c(NA, ymd("1980-10-14")) )
#[1] "numeric"
library(lubridate)
class( c( ymd("1980-10-14")) )
#[1] "POSIXct" "POSIXt"
class( c( ymd("1980-10-14"), NA) )
#[1] "POSIXct" "POSIXt"
这也可以解释其他异常现象。可能需要对高于我的薪酬等级的代码进行一些修改。
> getAnywhere(c.POSIXct)
2 differing objects matching ‘c.POSIXct’ were found
in the following places
package:base
registered S3 method for c from namespace base
namespace:base
namespace:lubridate
Use [] to view one of them
关于r - Lubridate 创建间隔运算符 %--% 抛出 "' 原点'必须提供“NA 上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27963954/