r - Lubridate 创建间隔运算符 %--% 抛出 "' 原点'必须提供“NA 上的错误

标签 r na lubridate

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:

的有效调用时,它返回一个 POSIXct 对象
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/

相关文章:

r - 按组在多个时间间隔列之间重叠

R dplyr : Use the function as a string in one column on the next column

r - 移动平均线变化窗口

r - 查找包含缺失值的列的名称

r - 计算具有 NA 值的列中满足条件的元素数

r - 根据首次注册和最近值转换 NA 值

r - 根据 R 中的其他变量更改值

r - 将文本大小映射到 ggplot 中的数据的策略

r - 词条文档熵计算

r - 切换到 DST : round_date() returns NAs