如何在 R 中将 POSIXct 对象与 NULL 正确组合?

How to properly combine POSIXct objects with NULL in R?

当使用 R 的原语 c 函数时,将当前日期时间与 NULL 组合得到:

> class(c(NULL,Sys.time()))
[1] "numeric"

但是最后传递 NULL 时:

> class(c(Sys.time(),NULL))
[1] "POSIXct" "POSIXt"

这是故意的吗? c 的文档如下: "The output type is determined from the highest type of the components in the hierarchy NULL < raw < logical < integer < double < complex < character < list < expression." 但没有提到相关的顺序。

是否有更好(更一致)的方法将 class POSIXctNULL 的对象组合成一个向量?还是应该始终明确测试 NULL 并将其作为单独的案例处理?

这是因为c充当S3泛型,并且有一个POSIXct方法:

> c.POSIXct
function (..., recursive = FALSE) 
.POSIXct(c(unlist(lapply(list(...), unclass))))
<bytecode: 0x000001ab3e6efe58>
<environment: namespace:base>

(S3 方法在第一个参数的 class 上调度,因此 c(POSIXct, NULL) 将调用 c.POSIXct,而 c(NULL, POSIXct) 将调用默认方法。)