如何在 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 POSIXct
和 NULL
的对象组合成一个向量?还是应该始终明确测试 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)
将调用默认方法。)
当使用 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 POSIXct
和 NULL
的对象组合成一个向量?还是应该始终明确测试 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)
将调用默认方法。)