Как правильно комбинировать объекты POSIXct с NULL в R?

При использовании примитивной функции R c объединение текущей даты и времени с NULL дает:

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

Но при передаче NULL последним:

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

Это предназначено? Документация для c гласит: «Тип вывода определяется из самого высокого типа компонентов в иерархии NULL ‹ необработанный ‹ логический ‹ целочисленный ‹ двойной ‹ сложный ‹ символ ‹ список ‹ выражение». но нет упоминания о том, что порядок имеет значение.

Есть ли лучший (более последовательный) способ объединить объекты класса POSIXct с NULL в вектор? Или всегда следует явно проверять NULL и обрабатывать его как отдельный случай?


person ddisk    schedule 06.12.2016    source источник


Ответы (1)


Это связано с тем, что c действует как универсальный S3, и для него существует метод POSIXct:

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

(Методы S3 отправляются в класс первого аргумента, поэтому c(POSIXct, NULL) вызовет c.POSIXct, тогда как c(NULL, POSIXct) вызовет метод по умолчанию.)

person Hong Ooi    schedule 06.12.2016