Какие правила используются для приведения даты в соответствие с функцией c () - PullRequest
6 голосов
/ 10 октября 2019

Как я понимаю, когда объекты, объединяемые с помощью функции c (...), имеют разные типы, они объединяются в один тип, который является типом выходного объекта

Согласно документации R

Тип вывода определяется по наивысшему типу компонентов в иерархии NULL <необработанный <логический <целочисленный <двойной <сложный <символ <список <выражение. </p>

Даты имеют тип данных double, поэтому, если в паре с символом должен получиться символ, если в паре с целым числом должен получиться двойной, как мы можем видеть здесь

> a<-as.Date("2019-01-01")
> c("a",a)
[1] "a"     "17901"
> c(1L,a)
[1]     1 17901
> typeof(c(1L,a))
[1] "double"

Однако, если датаСначала функция пытается преобразовать другие значения в класс Date. Похоже, это не соответствует поведению из документации

> c(a,1)
[1] "2019-01-05" "1970-01-02"
> c(a,"a")
[1] "2019-01-05" NA
Warning message: In as.POSIXlt.Date(x) : NAs introduced by coercion

Какие дополнительные правила применяются здесь? Или, в качестве альтернативы, что я неправильно понял в ситуации?

1 Ответ

4 голосов
/ 10 октября 2019

Функции могут быть «перегружены» в R в зависимости от типа данных первого параметра. Вы можете видеть, что есть специальная функция c.Date, которая запускается при вызове c с объектом Date в качестве первого параметра. Вы можете увидеть все «специальные» функции c() с помощью methods("c"). Эти функции могут (и делают) определять правила, отличные от базовой c() функции. Но поскольку перегрузка происходит только в зависимости от типа данных первого параметра, порядок, в котором отображаются значения, имеет большое значение.

...